C# dynamic 动态给类属性赋值
时间: 2023-09-01 16:06:26 浏览: 267
在 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# dynamic 在已有的类基础上动态生成字段
C# 中的 `dynamic` 关键字是用来在运行时动态解析方法和属性的。它通常用于与外部 API 交互、动态注入依赖项等方面。
如果你想在已有的类基础上动态生成字段,可以使用 `ExpandoObject` 类型。`ExpandoObject` 是一个动态类型,可以在运行时添加和删除属性。
下面是一个示例代码,演示了如何使用 `ExpandoObject` 动态添加字段:
```csharp
dynamic obj = new ExpandoObject();
obj.Name = "John";
obj.Age = 30;
Console.WriteLine($"Name: {obj.Name}, Age: {obj.Age}");
```
在这个示例中,我们首先创建了一个 `ExpandoObject` 实例。然后,我们可以像操作普通对象一样操作它,动态添加属性。最后,我们可以使用这些属性。
如果你想在已有的类基础上动态生成字段,可以将 `ExpandoObject` 转换为该类的实例:
```csharp
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
dynamic obj = new ExpandoObject();
obj.Name = "John";
obj.Age = 30;
Person person = (Person)obj;
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
```
在这个示例中,我们将 `ExpandoObject` 转换为 `Person` 类型的实例。由于 `ExpandoObject` 动态添加了 `Name` 和 `Age` 属性,所以我们可以将它们赋值给 `Person` 的属性。最后,我们可以使用 `Person` 对象。
阅读全文