我正在尝试将以下一段java代码转换为C#,而我正陷入需要获取列数据类型的位置。我不太确定我将使用的函数或过程调用。
.NET代码
namespace Workflow.DataTypes
{
[Serializable]
public class DataColumn1
{
private Type _dataTypes = null;
private string _columnName = null;
private string _defaultValue = null;
public DataColumn1(string columnName, Type dataType)
: this(columnName, typeof(string), null)
{
}
public DataColumn1(string columnName, Type dataType, string defaultValue)
{
SetColumnName(columnName);
SetDataType(dataType);
SetDeafultValue(defaultValue);
}
public string GetDefaultValue()
{
return _defaultValue;
}
public bool IsDefaultValueDefined()
{
return _defaultValue != null && _defaultValue.Trim().Length > 0;
}
public void SetDeafultValue(string def)
{
_defaultValue = def;
}
public string GetColumnName()
{
return _columnName;
}
public void SetColumnName(string columnName)
{
this._columnName = _columnName;
}
public Type GetDataType()
{
return _dataTypes;
}
public void SetDataType(Type types)
{
this._dataTypes = _dataTypes;
}
public void SetDataType(string type)
{
try
{
SetDataType(type != null ? typeof (Type) : typeof (string));
}
catch (ArgumentException e)
{
// to do JavaUtils.enumToList(DataTypes.class)
throw new ArgumentException("Unsupported data type: " + type + ". Supported types: " );
}
}
public override string ToString()
{
return GetColumnName() + "[" + GetDataType() + "]" + (IsDefaultValueDefined() ? " (" + _defaultValue + ")" : "");
}
}
}
我正在寻找的是如何返回列名及其数据类型。感谢您抽出宝贵时间阅读。
答案 0 :(得分:2)
我不确定这是不是你要求的,但如果你需要一个类型的名字,请使用
//short class name
typeof(T).Name
//full name with namespace
typeof(T).FullName
//namespace only
typeof(T).Namespace
typeof(T)
在编译时已解析,但如果您想在运行时动态获取它,请使用object.GetType()
。
修改强>
好的,我在你的代码中看到了一些错误:
public void SetColumnName(string columnName)
{
this._columnName = _columnName;
}
应该是
public void SetColumnName(string columnName)
{
this._columnName = columnName;
}
与
相同 this._dataTypes = _dataTypes;
应该是
this._dataTypes = dataTypes;
基本上你在那些方法中重新分配相同的值,忽略作为参数发送的对象。这肯定不会起作用:
public void SetDataType(string type)
{
try
{
SetDataType(type != null ? typeof (Type) : typeof (string));
}
我不确定你想在这里实现什么,但是typeof(Type)
是Type
,我怀疑你打算使用它。此外,typeof(string)
将返回字符串类的类型,而不是参数中的对象发送。 typeof(type)
(在参数中发送的对象)也会返回一个字符串类型,因为这是参数类型。尽量避免混淆与关键字相似的名称,尤其是从Java迁移到C#时,因为标准命名约定可能会让你失望。
答案 1 :(得分:0)
如果您不想使用命名空间,请尝试使用.GetType().FullName
或使用.GetType().Name
。