【发布时间】:2013-10-30 19:53:10
【问题描述】:
我有一个这样的 C# 类(为简单起见,删除了额外的属性):
public class MyClass<T>
{
public T MyProperty { get; set; }
}
是否可以在T 的类型之后以某种方式动态命名MyProperty?
例如,如果我将我的类实例化为:
MyClass<MyOtherClass> myClass = new MyClass<MyOtherClass>();
我希望 MyProperty 的名称改为 MyOtherClass。我环顾了 Google 和 StackOverflow,但没有找到类似的东西。这有可能吗?也许使用反射?
编辑:
首先,如果您要否决我的问题,如果您能评论一下原因,我将不胜感激。
其次,也许这有助于澄清我为什么要这样做。此类由 API 返回。它有一些与错误相关的信息,以及表示返回实体的通用类型属性。但是,当进行 API 调用时,响应如下所示:
[
{
"MyOtherClass": {
// properties here
},
"Errors": [
{
"ErrorCode": 1,
"Message": "sample string 1"
},
{
"ErrorCode": 1,
"Message": "sample string 1"
}
]
}
]
我希望上面的“MyOtherClass”是实体的实际名称(通用类型)。
【问题讨论】:
-
否;那是完全不可能的。你会如何在课堂上提及它?
-
你可以(但不应该)使用
dynamic。 -
这将完全违背泛型的目的,即在基类中定义基本功能。
-
感谢您的 cmets。我在我的问题中添加了一些说明。我不确定
dynamic在这种情况下会有什么帮助——我错过了什么吗? (另外,如果使用它不是一个好习惯,那么我不一定想沿着这条路走。)我不是想改变功能,只是改变属性的名称,或者以其他方式找到一种方法来拥有更好地响应我的 API 调用的名称。 -
@SLaks 你可能指的是
ExpandoObject,而不是dynamic。
标签: c# asp.net generics reflection asp.net-web-api