0

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

主要问题是我不知道如何转换 "return string.Join(",", states);" 当我尝试使用 .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[])' 的最佳重载方法匹配有一些无效参数

4

4 回答 4

5

string.Join在 .Net 3.5 中仅支持字符串数组,而 .Net 4.0 有额外的重载可以使用IEnumerable<string>or Object[]

您应该将 a 传递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

于 2013-06-03T06:08:46.877 回答
1

在 .Net 3.5 中,您用于“String.Join”的重载不可用。将您的返回行替换为以下 2 行:

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

预期的第二个参数是一个字符串数组。

于 2013-06-03T06:10:26.807 回答
1

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

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

于 2013-06-03T08:00:53.203 回答
0

谢谢大家的热情帮助。我将最后一行更改为以下内容:

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

再次感谢。

于 2013-06-03T06:45:49.333 回答