c# - 不带日期时间函数(如 ToShortDateString())的 DateTime 等类型的隐式运算符

标签 c# .net generics properties implicit-conversion

我想使用带有隐式运算符的泛型类。问题是使用底层函数。我认为最好的描述是我的代码

public class AnnotationField<T>
{
    public T Value { get; set; }
    public bool IsNullValue { get; set; }
    public CompareTypes CompareType { get; set; }

    public static implicit operator T(AnnotationField<T> temp)
    {
        return temp.Value;
    }

    public static implicit operator AnnotationField<T>(T temp)
    {
        Type correctType = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T);
        AnnotationField<T> annotationField = new AnnotationField<T> {};
        annotationField.Value = (T)Convert.ChangeType(temp, correctType);
        return annotationField;
    }
}

使用:

public AnnotationField<DateTime> Birthday { get; set; }

myObject.Birthday = new DateTime(1986, 7, 2); // <- Works
myObject.Birthday.ToShortDateString();  // <- Compiler-Error !
myObject.Birthday.Value.ToShortDateString();  // <- Works

如果 DateTime 可以为空,我需要另一个方法调用

public AnnotationField<DateTime?> Birthday { get; set; }

myObject.Birthday.Value.Value.ToShortDateString(); // <- Works but is not really usable!

最佳答案

添加 extension methodAnnotationField<DateTime?>输入:

public static class Extensions 
{
    public static string ToShortDateString(this AnnotationField<DateTime?> item)
    {
        return item.Value.Value.ToShortDateString();
    }
}

这样,您就可以调用:

public AnnotationField<DateTime?> Birthday { get; set; }

myObject.Birthday.ToShortDateString();

关于c# - 不带日期时间函数(如 ToShortDateString())的 DateTime 等类型的隐式运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17485905/

相关文章:

c# - 泛型类型转换器 - 泛型问题

android - 获取用于解析嵌套的 Parcelable 泛型字段的泛型类加载器

c# - 如何获取当前选定键盘布局的显示名称

c# - 根据您放入另一个 WPF 的信息将值/打开文件放入 WPF

c# - 如何使用 Dapper 从数据库中检索单个值

c# - C# '??' 运算符线程安全吗?

java - Java 中的泛型类

c# - 表单应用程序C#的无限while循环

c# - 为什么我的文件数组不是按数字顺序排列的?

c# - 如何将 UTF-8 byte[] 转换为字符串