3

こんにちは私はスイッチで文字列に変換された列挙型を使用していますが、機能しません。コンパイルエラーが発生します:タイプ'userControl_commontop.UserType'を'string'に暗黙的に変換できません

コードは次のとおりです。

private void CommonTopChangesnew(string usertype)
{

    switch (usertype.Trim().ToUpper())
    {
        case UserType.NORMAL :
            hlkSAD.Enabled = false;
            hlkMRTQuery.Enabled = false;
            hlkReqViewer.Enabled = false;
            hlkSendnotif.Enabled = false;
            break;
        case UserType.POWER :
            hlkSAD.Enabled = false;
            hlkReqViewer.Enabled = false;
            hlkSendnotif.Enabled = false;
            break;
    }
}

enum UserType
{
    NORMAL,
    POWER,
    ADMINISTRATOR
}
4

6 に答える 6

5

定数が文字列である以上、列挙は文字列ではありませんconst int MY_VALUE = 1;

文字列を Enum に変更する必要があります。

switch ((UserType)Enum.Parse(usertype, typeof(UserType))) {
  ...
}
于 2009-05-08T07:38:51.887 に答える
5

これを試してください:

enum UserType
{
  NORMAL,
  POWER,
  ADMINISTRATOR
}

private void CommonTopChangesnew(string usertype)
{
  switch ((UserType)Enum.Parse(typeof(UserType), usertype, true))
  {
    case UserType.NORMAL:
      hlkSAD.Enabled = false;
      hlkMRTQuery.Enabled = false;
      hlkReqViewer.Enabled = false;
      hlkSendnotif.Enabled = false;
      break;
    case UserType.POWER:
      hlkSAD.Enabled = false;
      hlkReqViewer.Enabled = false;
      hlkSendnotif.Enabled = false;
      break;
  }
}
于 2009-05-08T07:39:01.603 に答える
3

この関数を使用して、userTypeパラメーターを列挙値に変換できます。

object Enum.Parse(System.Type enumType, string value, bool ignoreCase);

なので

UserType utEnum =  Enum.Parse(UserType, userType, true);

次に、switchステートメントを次のように呼び出すことができます。

switch (utEnum)
    { ... }
于 2009-05-08T07:44:34.990 に答える
2

関数は文字列型のパラメーターを受け入れ、同じパラメーターを使用して Enum に属する型を比較します。ここに紛争があります。

関数は次のようになります。

private void CommonTopChangesnew(UserType usertype)
{

  switch (usertype)
  {
    case UserType.NORMAL :
      hlkSAD.Enabled = false;
      hlkMRTQuery.Enabled = false;
      hlkReqViewer.Enabled = false;
      hlkSendnotif.Enabled = false;
      break;
    case UserType.POWER :
      hlkSAD.Enabled = false;
      hlkReqViewer.Enabled = false;
      hlkSendnotif.Enabled = false;
      break;
  }
}
于 2009-05-08T07:40:20.603 に答える
0

文字列を列挙型と比較することはできません。

メソッドに列挙型を渡す必要があります。

于 2009-05-08T07:41:44.780 に答える
0

オプション1:CommonTopChangesnewを変更して、UserType列挙型をパラメーターとして受け入れるようにします

また

オプション2:Enum.Parseを使用して、文字列をスイッチブロックのUserType列挙型に変換します。

(UserType)Enum.Parse(typeof(UserType)、usertype)

于 2009-05-08T07:42:47.740 に答える