这是.net framework 4.0的代码。 但我们的旧系统使用的是3.5。升级所有代码很困难。 我想知道如何更改4.0到3.5代码所写的代码。
主要问题是我不知道如何转换"返回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 [])'有一些无效的论点
答案 0 :(得分: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
答案 1 :(得分:1)
在.Net 3.5中,您用于“String.Join”的重载不可用。 用以下2行替换返回行:
string[] stateNames = Enum.GetNames(typeof(States));
return string.Join(",", stateNames);
预期的第二个参数是一个字符串数组。
答案 2 :(得分: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
答案 3 :(得分: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的结果是否相同。
再次感谢。