我有一个这样的C#类(为简单起见,删除了额外的属性):
public class MyClass<T>
{
public T MyProperty { get; set; }
}
是否有可能以MyProperty
的类型动态命名T
?
例如,如果我将我的类实例化为:
MyClass<MyOtherClass> myClass = new MyClass<MyOtherClass>();
我希望MyProperty
的名称改为MyOtherClass
。我查看过谷歌和StackOverflow,但没有找到这样的东西。这有可能吗?也许使用反射?
修改
首先,如果您打算回答我的问题,如果您愿意评论原因,我将不胜感激。
第二,也许这有助于澄清我为什么要这样做。该类由API返回。它有一些与错误相关的信息,以及表示被返回实体的泛型类型属性。但是,在进行API调用时,响应看起来像这样:
[
{
"MyOtherClass": {
// properties here
},
"Errors": [
{
"ErrorCode": 1,
"Message": "sample string 1"
},
{
"ErrorCode": 1,
"Message": "sample string 1"
}
]
}
]
我希望上面的“MyOtherClass”是实体的实际名称(泛型)。
答案 0 :(得分:1)
您可以延长DynamicObject
:
public class MyClass<T> : DynamicObject
{
private T property;
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (binder.Name == typeof(T).Name)
{
result = property;
return true;
}
else
{
result = null;
return false;
}
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
if (binder.Name == typeof(T).Name && value is T)
{
property = (T)value;
return true;
}
else
{
return false;
}
}
}
你可以使用:
dynamic myObj = new MyClass<string>();
myObj.String = "value";
string value = myObj.String;