属性类型来自变量

时间:2011-01-12 14:13:28

标签: c# class

考虑以下课程:

public class ShortName
{
    public string ValueString { get; set; }

    private Type ValueType { get; }

    public typeof(ValueType) Value
    {
        get
        {
            //do stuff
        }
    }
}

由于无法识别typeof(ValueType),因此无法实现。任何人都可以帮我定义“Value”属性类型作为ValueType返回的类型吗?

感谢

4 个答案:

答案 0 :(得分:1)

这是完全不可能的 如果你仔细考虑它,它首先没有任何意义。

属性必须具有编译时类型;您正在尝试定义其类型仅在运行时已知的属性 你怎么能使用这个属性?

相反,您可以创建object属性或使用泛型。

答案 1 :(得分:1)

不确定你想要什么但是:

public Type Value
{
    get
    {
        return ValueType.GetType();
    }
}

由于typeof(<anything>)将返回Type

如果这不是您想要的,请查看使用Generics

答案 2 :(得分:0)

使用泛型可能是可能的。尝试:

public class ShortName<T>
{     
     public string ValueString { get; set; }      
     private Type ValueType { get; }      
     public T Value<T>  
     { 
         get {  return /*Something cast to a T */ ; }     
     }
}

答案 3 :(得分:0)

public class ShortName<T>
{
    public string ValueString 
    { 
        get 
        {
            return Value.ToString(); // be aware of null ref here!
        }
    }
    private Type ValueType 
    { 
        get 
        {
            return typeof(T);
        }
    }

    public T Value
    {
        get; set;
    }
}