C# dynamic 动态给类属性赋值
时间: 2023-09-01 15:06:26 浏览: 407
在 C# 中,可以使用 `dynamic` 关键字来动态给类属性赋值。使用 `dynamic` 关键字,可以避免使用反射的繁琐操作。下面是一个示例代码:
```csharp
// 定义一个类
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
// 动态给类属性赋值
dynamic person = new Person();
person.Name = "张三";
person.Age = 20;
Console.WriteLine(person.Name); // 输出:张三
Console.WriteLine(person.Age); // 输出:20
```
上述代码使用 `dynamic` 关键字定义了一个 `Person` 类的对象,并动态给它的 `Name` 和 `Age` 属性赋值。最终,输出了 `Person` 对象的属性值。需要注意的是,使用 `dynamic` 关键字存在一定的类型不安全性,需要谨慎使用。
相关问题
C# dynamic 根据属性名字符串给类属性赋值
在 C# 中,可以使用 `dynamic` 关键字和 `ExpandoObject` 类来根据属性名字符串给类属性赋值。下面是一个示例代码:
```csharp
// 引入命名空间
using System.Dynamic;
// 定义一个类
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
// 根据属性名字符串给类属性赋值
dynamic person = new ExpandoObject();
person.Name = "张三";
person.Age = 20;
var p = new Person();
p.Name = person.Name;
p.Age = person.Age;
Console.WriteLine(p.Name); // 输出:张三
Console.WriteLine(p.Age); // 输出:20
```
上述代码使用 `ExpandoObject` 类创建了一个动态对象 `person`,然后根据属性名字符串 `"Name"` 和 `"Age"` 给动态对象的属性赋值。最终,将动态对象的属性值赋给 `Person` 类的对象 `p`,并输出了 `p` 对象的属性值。
需要注意的是,使用 `dynamic` 关键字和 `ExpandoObject` 类存在一定的类型不安全性,需要谨慎使用。
C# 给动态创建的实体进行赋值
在C#中给动态创建的实体赋值通常涉及几种方法,具体取决于你使用的框架和技术栈。下面是几个常见的方案:
### 1. 使用匿名类型
如果你只是需要临时创建一些数据结构并对其进行操作而不打算复用它们的话,可以考虑使用匿名类型。
```csharp
var entity = new { Name = "John", Age = 30 };
```
但这仅限于局部范围内的快速原型设计,并不适合长期维护的应用程序逻辑。
### 2. 反射 (Reflection)
对于已知类型的实例化以及属性设置,反射提供了一种较为通用的方式:
```csharp
Type type = typeof(MyEntity);
object instance = Activator.CreateInstance(type);
// Set property value using reflection.
PropertyInfo prop = type.GetProperty("Name");
prop.SetValue(instance, "Dynamic Value", null);
```
这种方法虽然灵活性高但是性能较低,在频繁执行此操作时需要注意效率问题。
### 3. ExpandoObject 类型
`ExpandoObject` 是 .NET Framework 提供的一个特殊类,它允许你在运行时添加成员(如字段、事件等)。这对于构建完全未知的对象非常有用。
```csharp
dynamic expandoObj = new ExpandoObject();
expandoObj.Name = "Joe";
expandoObj.Age = 45;
```
不过值得注意的是 `ExpandoObject` 的滥用可能导致难以调试的问题,因为它绕过了静态类型检查机制。
### 4. 动态表达式树或 LINQ 表达式
如果涉及到复杂的查询或者转换场景下生成实体,则可以根据需求编写相应的 Lambda 或者 Expression Tree 来构造最终的结果集。例如结合 Entity Framework Core 进行数据库访问时候经常遇见这种情况。
以上就是关于如何向 C# 中动态创建出来的对象赋予特定初始值得若干解决方案,请根据实际应用场景选择最合适的做法!
阅读全文
相关推荐




