如何将这些代码更改为c# .net框架3.5

本文关键字:net 框架 代码 | 更新日期: 2023-09-27 18:16:43

这是。net framework 4.0的代码。但是我们的旧系统使用3.5。很难升级所有的代码。我想知道如何改变由4.0代码到3.5代码编写的代码。

主要问题是我不知道如何转换"返回字符串"。加入("、"州);"当我试图使用。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[])'有一些无效参数

如何将这些代码更改为c# .net框架3.5

string.Join在。net 3.5中只支持字符串数组,而。net 4.0有额外的重载来处理IEnumerable<string>Object[]

您应该将string[]传递给Join方法。

更多MSDN文档:

。网络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 =应用程序). aspx

这是您原始解决方案的稍微修改版本

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

在。net 3.5中,你对"String "使用的重载。"加入"不可用。将返回行替换为以下2行:

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

第二个参数是string数组

感谢大家的热情帮助。我把最后一行改成如下:

        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的结果相同。

再次感谢。