私は少し問題があります。 私のコードの最初のメソッドでは、txtファイルの学生に関するデータをListコレクションにロードしました。もっと多くのタイプの学生がいます(PrimaryStudent、SecondaryStudent、HightSchoolStudent、UniversityStudent、ExternStudentなど...) 他の方法では、すべての種類の学生を別のディレクトリに保存します。私の問題は、そのインタフェース内のすべてのオブジェクトが1つのコレクションに含まれていることです。どのように差別化することができますか、どのようにしてすべてのタイプの生徒を区別することができますか?助けてください。あなたのリストがジェネリックである場合、すなわちList<Student>
あなたが次のことを行うことができオブジェクトを右のタイプに変換する
答えて
:
List<PrimaryStudent> primaryStudents = myStudentList.OfType<PrimaryStudent>().ToList();
あなたのリストは、一般的なされていない場合ので、同じように、あなたがそれらを分離することができます
foreach(var s in myStudentList)
{
if(s is PrimaryStudent)
{
// add to PrimaryStudents list
}
else if(s is SecondaryStudent)
{
...
}
}
OfType
はを見てくださいC#のis
keyword。
例:
List<IStudent> students = new List<IStudent>();
students.Add(new PrimaryStudent());
students.Add(new SecondaryStudent());
students.Add(new HightSchoolStudent());
foreach (IStudent student in students)
{
if (student is PrimaryStudent)
{
Console.WriteLine("This was a PrimaryStudent");
}
else if (student is SecondaryStudent)
{
Console.WriteLine("This was a SecondaryStudent");
}
else if (student is HightSchoolStudent)
{
Console.WriteLine("This was a HightSchoolStudent");
}
}
Console.Read();
出力:
This was a PrimaryStudent
This was a SecondaryStudent
This was a HightSchoolStudent
isキーワードは、小学生や中学生の基本クラスである通常の生徒を保存したくない場合にのみ機能します。 –
if文を他のすべてのif文の下に置くとうまくいくでしょう。 – GameScripting
これは当てはまりますが、このコードは維持して拡張するのが難しいでしょう。私は毎回新しい学生タイプのための特別なコードを書いてはいけません。私の一般的な解決策は、どの学生の種類が存在するかを知る必要はありません。単にタイプ別にグループ化します。 –
あなたが最初のコレクションからすべての生徒のタイプを取得し、その最終的な場所にタイプすることによって、それらを保存することができます。 Students、PrimaryStudents、およびSecondaryStudentsを異なるフォルダに保存する場合、これらの演算子が正しく機能しないため、ここに示した解決策では、OfまたはOfType <> LINQメソッドを使用しません。
つまり、ベースクラスのインスタンスを別々に扱いたい場合(たとえばdifferntフォルダに保存する場合)、OfTypeとis演算子を放棄する必要がありますが、タイプを直接チェックする必要があります。
class Student { }
class PrimaryStudent : Student { }
class SecondaryStudent : Student { }
private void Run()
{
var students = new List<Student> { new PrimaryStudent(), new PrimaryStudent(), new SecondaryStudent(), new Student() };
Save(@"C:\University", students);
}
private void Save(string basePath, List<Student> students)
{
foreach (var groupByType in students.ToLookup(s=>s.GetType()))
{
var studentsOfType = groupByType.Key;
string path = Path.Combine(basePath, studentsOfType.Name);
Console.WriteLine("Saving {0} students of type {1} to {2}", groupByType.Count(), studentsOfType.Name, path);
}
}
Saving 2 students of type PrimaryStudent to C:\University\PrimaryStudent
Saving 1 students of type SecondaryStudent to C:\University\SecondaryStudent
Saving 1 students of type Student to C:\University\Student
- 1. タイプ 'System.String'のオブジェクトをタイプ 'Xamarin.Forms.View'に変換できません
- 2. インスタンスのタイプArrayListをInstancesオブジェクトに変換する
- 3. タイプ 'System.EventHandler'のオブジェクトはタイプ 'System.Windows.Forms.DataGridViewCellEventHandler'に変換できません
- 4. タイプ 'System.Int32'のオブジェクトは、 'System.Web.Security.Cryptography.Purpose'タイプに変換できません。
- 5. プロパティグリッド 'System.String'タイプのオブジェクトは 'x'タイプに変換できません
- 6. タイプ 'Data.TimeLineChartedDay []'のオブジェクトは、タイプ 'Data.TimeLineChartedDay []'に変換できません。
- 7. Subsonic: 'System.UInt64'タイプのオブジェクトは 'System.Int64'タイプに変換できません
- 8. "xxx"タイプのオブジェクトは "yyy"タイプに変換できません
- 9. 'System.Reflection.ParameterInfo'タイプのオブジェクトは 'System.Int32'タイプに変換できません
- 10. QStringsを他のタイプに変換する
- 11. arrylistタイプを変換する
- 12. あるタイプの配列を別のタイプに変換する
- 13. java.lang.String型のオブジェクトをタイプtiagov.rideabike1.Model.Fretesに変換できません。
- 14. 'System.Data.SqlClient.SqlDataReader'タイプのオブジェクトを 'System.IConvertible'に変換できません
- 15. com.google.firebase.database.DatabaseException:java.lang.String型のオブジェクトをタイプ3に変換できません
- 16. com.google.firebase.database.DatabaseException:タイプjava.lang.Stringのオブジェクトをcom.csaminorproject.www.procompete.pojo.Categoryに変換できません。
- 17. org.apache.camel.NoTypeConversionAvailableException:タイプ変換ができないタイプから変換する:
- 18. オブジェクトを配列に変換したオブジェクトlodashを変換する
- 19. Eclipse JDT ITypeBindingをタイプに変換する
- 20. NpgsqlテキストタイプをC#タイプに変換する
- 21. タイプをmyTypeに変換する
- 22. System.Drawing.PenをSkiaSharpタイプに変換する
- 23. enumタイプをstd_logic_vectorに変換するVHDL
- 24. タイプ変換を無効にする
- 25. JSONファイルをロードして特定のタイプのオブジェクトに変換する方法は?
- 26. StanfordNLP:互換性のないタイプ:オブジェクトをCoreMapに変換できません
- 27. PowerBASICタイプをVB6タイプに変換するには?
- 28. オブジェクトをオブジェクトに変換する
- 29. jsonオブジェクトをjsonオブジェクトに変換する
- 30. JSONオブジェクトをC#オブジェクトに変換する
genericリストを使用していますか? –
はい。私はそれを通常使っています。 – user35443
ダウンは私が探していた解決策です。 – user35443