簡體   English   中英

返回通用C#類中的列的數據類型

[英]Returning the data type of columns in a generic C# class

我試圖將以下一段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 + ")" : "");
        }
    }
}

我正在尋找的是如何返回列名稱及其數據類型。 感謝您抽出寶貴時間閱讀。

我不確定這是不是你要求的,但如果你需要一個類型的名字,請使用

//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#時,因為標准命名約定可能會讓你失望。

嘗試使用.GetType().FullName.GetType().Name如果您不想要名稱空間,請使用名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM