如何正确创建在 C# 中返回 Type 的方法(Java 到 C# 的转换)

本文关键字:方法 Java 转换 Type 创建 何正确 返回 | 更新日期: 2023-09-27 18:31:07

我目前正在将一些代码从Java移植到C#。

我遇到了一个在 Java 中不太困难的代码问题:

public static Object getJavaDataType(DataType dataType) {
        switch (dataType) {
        case Boolean:
            return Boolean.class;
        case Date:
            return java.util.Date.class;
        case Integer:
            return Integer.class;
        case String:
            return String.class;
        default:
            return null;
        }
    }

我在将其转换为 C# 时遇到困难。到目前为止,我的最大努力看起来类似于这样:

public static Type getJavaDataType(DataType dataType) {
            if(dataType == BooleanType){
                return Type.GetType("Boolean");
            } else if ...

所以我设法处理了 Enum 转换为公共密封类的事实:

public sealed class DataType
    {
        public static readonly DataType BooleanType = new DataType(); ...

但是类型代码对我来说看起来不正确(它真的必须由 String 指定吗?有人知道此功能的更优雅实现吗?

如何正确创建在 C# 中返回 Type 的方法(Java 到 C# 的转换)

你需要typeof,即

  • typeof(bool)
  • typeof(int)
  • typeof(string)
  • typeof(DateTime)

哦,枚举在 C# 中也同样受支持:

public enum DataType
{
    Boolean,
    String,
    Integer
}

用法将是:

case DataType.String:
    return typeof(string);

更新:

由于

需要向枚举添加方法,因此可以改用扩展方法,而不是使用具有static readonly字段的类。

它看起来像这样:

public enum DataType
{
    Boolean,
    String,
    Integer
}
public static class DataTypeExtensions
{
    public static Type GetCsharpDataType(this DataType dataType)
    {
        switch(dataType)
        {
            case DataType.Boolen:
                return typeof(bool);
            case DataType.String:
                return typeof(string);
            default:
                throw new ArgumentOutOfRangeException("dataType");
        }
    }
}

用法是这样的:

var dataType = DataType.Boolean;
var type = dataType.GetCsharpDataType();

下面是 C# 中枚举的投注示例:

public enum DataType
{
    Boolean,
    Date,
    Integer,
    String
}

这是您的方法:

public static Type getJavaDataType(DataType dataType)
{
    switch (dataType)
    {
        case DataType.Boolean:
            return typeof(bool);
        case DataType.Date:
            return typeof(DateTime);
        case DataType.Integer:
            return typeof(int);
        case DataType.String:
            return typeof(string);
        default:
            return null;
    }
}

除非转换为类型名称,否则使用 Switch 语句无法做到这一点。

        switch (dataType.GetType().Name)
        {
            case "TextBox":
                break;
        }
        return null;