-2

C# 4.5 でジェネリック データ型を理解しようとしています。戻り値の型が bool の単純なメソッド CompareMyValue が 2 つの値を比較するクラス チェックを作成しました。現在、メインクラスでオブジェクトを作成し、入力パラメーターを使用してこのメ​​ソッドを呼び出していますが、デバッグ中にメインクラス呼び出しのメソッドが bool a1 と a2 に対して正しい結果を返さないことに気付きました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace C_Sharp_Practice_Code_01.GenericCollection
{
class check<UNKNOWNDATATYPE>
 {
    public bool CompareMyValue(UNKNOWNDATATYPE x, UNKNOWNDATATYPE y)
    {
        if(x.Equals(y))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
  } 
}

メインクラス

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using C_Sharp_Practice_Code_01.GenericCollection;

namespace C_Sharp_Practice_Code_01
{
 class mainClass
 {
    static void Main(string[] args)
    {
        mainClass obj1 = new mainClass();

        obj1.call_GenericClass();
    }
    public void call_GenericClass()
    {
        check<int> _check = new check<int>();
        check<string> _check2 = new check<string>();

        bool a1 = _check.CompareMyValue(1, 1);
        bool a2 = _check2.CompareMyValue("xyz", "xyz");
    }
 }
}
4

2 に答える 2

3

メイン クラス呼び出しのメソッドは、bool a1 および a2 に対して正しい結果を返しません。

CompareMyValue-Function を呼び出すに、その行でブール変数をチェックしたのではないでしょうか?


サンプル プロジェクトでコードをテストしたところ、問題なく動作しました。

bool a1 = _check.CompareMyValue(1, 1); 
System.Diagnostics.Debug.Print(a1.ToString()); // prints true
bool a2 = _check2.CompareMyValue("xyz", "xyz");
System.Diagnostics.Debug.Print(a2.ToString()); // prints true
bool a3 = _check2.CompareMyValue("x", "y"); // another example
System.Diagnostics.Debug.Print(a3.ToString()); // prints false
于 2013-07-30T09:45:48.510 に答える
0

私はそれを機能させることができました...

class check<T>
{
    public bool CompareMyValue(T x, T y)
    {
        if (x.Equals(y))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

そして、それをテストしました

check<int> intChecker = new check<int>();
Console.WriteLine(intChecker.CompareMyValue(4, 5).ToString());
Console.ReadKey();

check<string> strChecker = new check<string>();
Console.WriteLine(strChecker.CompareMyValue("The test", "The test").ToString());
Console.ReadKey();

check<decimal> decChecker = new check<decimal>();
Console.WriteLine(decChecker.CompareMyValue(1.23456m, 1.23456m).ToString());
Console.ReadKey();

check<DateTime> dateChecker = new check<DateTime>();
Console.WriteLine(dateChecker.CompareMyValue(new DateTime(2013, 12, 25), new DateTime(2013, 12, 24)).ToString());
Console.ReadKey();
于 2013-07-30T09:55:21.900 に答える