0

C# で、このようなことができますか?

type typeOfInt = type(int);
int x = (typeOfInt)1;

基本的に型を変数として格納したいので、変数をキャストとして使用できます。私のパラメトリック多態性関数では、変数が2つのタイプのうちの1つである可能性があるため、これを実行しようとしています。どちらのタイプにも使用したい同じメソッドがありますが、変数タイプであるため使用できません。

    public static void SetFolderOrderValue<T>(T item, int value, Report reportObject)
    {
        if (!item.Exists)
        {
            reportObject.Log("The folder \"" + item.Name + "\" does not exist.");
            return;
        }
        try
        {
            item.SetProperty(folderOrderProperty, value);
            item.Update();
        }
        catch (SPException ex)
        {
            reportObject.Log("An error occurred when saving changes to the folder \"" + item.Name + "\". Maybe due to concurrent changes from another user. Please try again after a minute.\n" + Report.GetErrorInfo(ex));
        }
        catch (Exception ex)
        {
            reportObject.Log("An error occured with \"" + item.Name + "\":\n" + Report.GetErrorInfo(ex));
        }
    }

少なくともキャストを値として格納できれば、関数に別のブール値を渡して、2 つの型のどちらであるかを示すことができます。

4

3 に答える 3

9

あなたはポリモーフィズムについて話しているので、それを使用してください。

同じまたは共通のメソッドを持つ 2 つの型があり、それらに作用する関数または関数のセットがある場合は、interfaceそれらの 2 つの型と 間で共有されるメソッドのセットを記述する を定義します。

あなたが話しているタイプに名前が付けられていてSPFileSPFolder

public class SPFile : IMyNewInterface  {
   .....
}

public class SPFolder : IMyNewInterface  {
   ...
}

public static void SetFolderOrderValue<T>(T item, int value, 
              Report reportObject) where T : IMyNewInterface    {
     ...
}
于 2013-07-09T14:52:13.883 に答える
0

はい、タイプを保存できますが、これはおそらくコードの匂いです。

http://msdn.microsoft.com/en-us/library/system.object.gettype.aspx およびhttp://msdn.microsoft.com/en-us/library/system.type.aspxを参照してください。

ここに例があります

int x = 1;
var type = x.GetType();
Console.WriteLine(type);
于 2013-07-09T14:53:59.397 に答える