它不可能创造这样的限制。您应该在运行时检查输入并发出有用的异常错误消息。
但是,您可以这样做:
public interface IWellKnown
{
int PropertyA { get; }
int PropertyB { get; }
}
public abstract class WellKnownBase<T> : IWellKnown
{
IWellKnown.PropertyA { get { return Convert(this.PropertyA); } }
IWellKnown.PropertyB { get { return Convert(this.PropertyB); } }
public T PropertyA { get; }
public T PropertyA { get; }
protected virtual int Convert(T input) { return (int)input; }
}
使用这样的基类引导一个实现具体的版本,以提供一种方法来转换为int
。显式接口实现提供对类型访问器的访问,而“真实”类仍然提供原始类型。
public class WellKnownFloat : WellKnownBase<Float> {}
会为您提供一个float类。如果类型不是浇注料为int你可以提供一个自定义转换器:
public class WellKnownTimeSpan : WellKnownBase<TimeSpan>
{
protected override int Convert(TimeSpan input)
{
return (int)input.TotalMilliseconds;
}
}
顺便说一句,使用LINQ和添加的要求,你可以重写你的函数input.Select(x => x.PropertyA + x.PropertyB)).ToArray()
接口。 PS:请使用VisualStudio检查代码,我只是在没有编译器支持的情况下将它写出来;)编译时错误可能很小。
是的你是对的,但如果我需要这些属性通常是数字,不一定是整数。我把这个问题说错了,对不起。不过谢谢你的回答。 – NumberFour 2011-05-08 10:08:47