簡體   English   中英

如何將這些代碼更改為C#.net framework 3.5?

[英]How can I change these codes to C#.net framework 3.5?

這是.net Framework 4.0的代碼。 但是我們的舊系統使用的是3.5。 升級所有代碼很困難。 我想知道如何將由4.0編寫的代碼更改為3.5代碼。

主要問題是我不知道如何轉換“ return string.Join(“,”,狀態);“ 當我嘗試使用.net framework 3.5進行編譯時發生錯誤。

謝謝!

public enum States
{
....
}

public static string GetStates(uint stateFlags)
{
    var stateList = Enum.GetValues(typeof(States));
    var states = default(States);

    foreach (var state in stateList)
    {
        if (state == null) continue;
        var stateEnum = (States)state;
        if (HasState(stateFlags, stateEnum))
        {
            states = states | stateEnum;
        }
    }

    return string.Join(",", states);
}

錯誤為錯誤。'string.Join(string,string [])'的最佳重載方法匹配具有一些無效的參數

.Net 3.5中的string.Join僅支持字符串數組,而.Net 4.0具有其他重載以與IEnumerable<string>Object[]

您應該將一個string[]傳遞給Join方法。

有關MSDN文檔的更多信息:

.Net 4: http//msdn.microsoft.com/en-us/library/dd992421( v = vs.100).aspx

.Net 3.5: http//msdn.microsoft.com/en-us/library/57a79xd0( v = vs.90).aspx

在.Net 3.5中,用於“ String.Join”的重載不可用。 將您的返回行替換為以下兩行:

 string[] stateNames = Enum.GetNames(typeof(States));
 return string.Join(",", stateNames);

預期的第二個參數是字符串數組。

這是原始解決方案的略微修改版本

public enum States
{
    None = 0,
    StateOne = 1,
    StateTwo = 2,
    StateThree = 4,
    StateFour = 8,
};

public static string GetStates(uint stateFlags)
{
    var stateList = Enum.GetValues(typeof(States));
    List<States> states = new List<States>();

    foreach (int state in stateList)
    {        
        if ((stateFlags & state) != 0)
        {
            states.Add((States)state);
        }
    }

    return string.Join(",", states);
}

跑步

GetStates((uint)(States.StateOne | States.StateTwo))

輸出

StateOne,StateTwo

謝謝大家的熱烈幫助。 我將最后一行更改為以下內容:

        var valuesAsList = GetValues(states).Cast<string>().ToList();

        return string.Join(",", valuesAsList.ToArray());

並添加了方法:

    public static IEnumerable<Enum> GetValues(Enum enumeration)
    {
        List<Enum> enumerations = new List<Enum>();
        foreach (FieldInfo fieldInfo in enumeration.GetType().GetFields(BindingFlags.Static | BindingFlags.Public))
        {
            enumerations.Add((Enum)fieldInfo.GetValue(enumeration));
        }
        return enumerations;
    }

編譯錯誤消失了,但是我仍然沒有測試代碼以查看與.net 4.0是否相同。

再次感謝。

暫無
暫無

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

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