0

我有一个这样的 C# 类(为简单起见,删除了额外的属性):

public class MyClass<T>
{
    public T MyProperty { get; set; }
}

MyProperty是否可以在类型之后以某种方式动态命名T

例如,如果我将我的类实例化为:

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”是实体的实际名称(通用类型)。

4

1 回答 1

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;
于 2013-10-30T20:35:26.613 回答