我有一个非通用的包装器,可以容纳一个受支持对象的实例。其中一种受支持的类型是DateTime
。在内部,包装器使用选择的原始值存储值,因此不能立即使用类型DateTime
的实例,需要简单的表示。可以使用属性DateTime.Ticks
返回Int64
的实例(出于某种原因,long
Int64
DateTime.cs
中的DateTime.Ticks
被不小心互换。
如果DateTime
的返回类型发生了变化,则不会抛出任何异常,该对象将照常使用,这是一场灾难。常识告诉我它不会改变,但我觉得依赖这些想法是不负责任的。现在我已经对负责执行{{1}}演员表的代码发表了评论,我错过了一个更好的选择吗?
答案 0 :(得分:0)
在将框架类属性的值赋给后备基元类型字段时,可以使用通用帮助器方法。
在框架汇编中:
public class FrameworkClass
{
public long Ticks;
}
在你的集会中:
class Program
{
static void Main(string[] args)
{
var fc = new FrameworkClass() { Ticks = 2 };
long backingField;
Assign(out backingField, fc.Ticks);
Console.Error.WriteLine(backingField);
}
static void Assign<T, U>(out T left, U right) where U : T
{
left = right;
}
}
如果框架程序集发生更改以使Ticks
字段不再是long
,则代码将无法针对新框架进行编译,并且如果您尝试运行针对“旧”编译的程序集“具有”新“框架的框架,您将获得MissingFieldException
- 不会进行任务。