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);
}

エラーは Error The best overloaded method match for 'string.Join(string, string[])' has some invalid arguments です

4

4 に答える 4

5

string.Join in .Net 3.5 only supports a string array whereas .Net 4.0 has additional overloads to work with IEnumerable<string> or Object[].

You should be passing a string[] to the Join method.

More at the MSDN docs:

.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

これは、元のソリューションのわずかに変更されたバージョンです

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 に答える
1

.Net 3.5 では、「String.Join」に使用したオーバーロードは使用できません。戻り行を次の 2 行に置き換えます。

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

予想される 2 番目の引数は文字列の配列です。

于 2013-06-03T06:10:26.807 に答える
0

Thank you everybody for your warmly help. I changed the last line to below:

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

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

And added the method:

    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;
    }

The compile error disappeared, but I still haven't test the code to see whether it's the same result with .net 4.0.

Thanks again.

于 2013-06-03T06:45:49.333 に答える