返回通用C#类中的列的数据类型

时间:2014-02-13 23:21:44

标签: c# java asp.net generics code-conversion

我正在尝试将以下一段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 + ")" : "");
        }
    }
}

我正在寻找的是如何返回列名及其数据类型。感谢您抽出宝贵时间阅读。

2 个答案:

答案 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