1. ホーム
  2. c#

[解決済み] タイプ 'customtype' を 'othercustomtype' に暗黙的に変換することはできません。

2022-02-01 14:30:37

質問

私はC#の初心者です。Personsクラスと、Personsクラスを継承したUserクラスを持っています。私のコンソールでは、配列にユーザーを入力しています。そして、ユーザー配列にあるユーザーにノートを追加するには、ユーザーIDを入力するだけです。Personsクラスでは、このユーザーがusers配列にあるかどうかを検索する関数を持っています。

public static Persons FindPerson(Persons[] persons, int noteid)
{
    foreach (Persons person in persons)
        if (person.ID == noteid) return person;
    return null;
}

Userクラスでは、users配列にあるidを取得するまで、idの入力をすべてループする関数を持っています。

public static User SelectUser(User[] users)
{
    while (true)
    {
        Console.Write("Please enter the User id: ");
        string input = Console.ReadLine();
        int id;
        if (int.TryParse(input, out id))
        {
            Persons person = Persons.FindPerson(users, id);
            if (person != null) return person; // fail on "return person"                   
        }
        Console.WriteLine("The User does not exist. Please try again.");                
    }
}

このエラーメッセージは、if 文の "return person" で表示されることを除けば、すべてうまく動作しています。

タイプ 'UserCustomerNotes.Persons' を 'UserCustomerNotes.User' に暗黙的に変換することはできません。明示的な変換が存在します(キャストが抜けていませんか?)

どなたか助けてください。よろしくお願いします。

解決方法は?

なぜなら Person は必ずしも User を暗黙のうちに変換することはできません。 PersonUser . あなたの場合 知っている のリストを持っています。 User というように、明示的に指示することができます。 Person は、実は User "を使用しています。

if (person != null)
   return (User) person;

キャスト( (User) でない場合は、実行時に例外がスローされます。 User のコレクションから始めているので、そのようなことはありません。 User のようなもので、心配する必要はありません。