如何正确创建在 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 指定吗?有人知道此功能的更优雅实现吗?
你需要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;