我沒有什麼問題。 在我的代碼的第一個方法中,我已經將關於學生的數據從txt文件加載到List集合。還有更多類型的學生(班PrimaryStudent,SecondaryStudent,HightSchoolStudent,大學學生,ExternStudent等) 現在,在其他方法我要節省每樣的學生到不同的目錄。我的問題在於,我在該界面中的所有對象中都有對象。現在我該怎麼區分呢?我該怎麼做才能區分所有類型的學生?請幫忙。將對象轉換爲正確的類型
回答
如果列表是通用的,即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不起作用,因爲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
這是真的,但這個代碼很難保持和擴展。我不想每次都爲新的學生類型編寫額外的代碼。我的通用解決方案不需要知道哪些學生類型存在。它只是按類型對它們進行分組。 –
您可以首先從收集獲得所有學生的類型,然後按類型保存到它們的最終位置。此處介紹的解決方案不使用is或OfType方法,因爲如果要將Students,PrimaryStudents和SecondaryStudents存儲在不同的文件夾中,則這些運算符無法正常工作。
換句話說,如果你想要把你的基類的實例differntly(例如保存到不同的充文件夾),你需要放棄OfType和運營商是直接,但檢查的類型。
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. 將泛型類型轉換爲對象
- 2. 將類類型對象轉換爲Intptr
- 3. 將組合框對象轉換回其正確的類型
- 4. 將對象類型{char []}轉換爲char []
- 5. 將對象轉換爲其他類型
- 6. 將對象[]轉換爲特定類型
- 7. 無法將類型爲'System.Int32'的對象轉換爲類型'System.Web.Security.Cryptography.Purpose'
- 8. 如何將用戶輸入字符串轉換爲正確的對象類型
- 9. 如何將類對象轉換爲通用對象類型?
- 10. ArrayList.toArray()不轉換爲正確的類型?
- 11. 將對象類型轉換爲Objective-C中的子類對象類型C
- 12. 轉換值對象爲正確的RegistryValueKind
- 13. 將類型T的對象轉換爲類型T <System.Guid>
- 14. 無法將類型java.lang.Long的對象轉換爲類型com.example.or.dancers.Info
- 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. 無法正確地將JSON對象轉換爲Java對象
- 18. 根據對象實例類型轉換的正確方法
- 19. 將類型轉換爲可轉換類型的對/元組
- 20. 對象類型的轉換
- 21. 如何將COM對象類型轉換爲Excel.Checkbox類型
- 22. 將類型對象轉換爲類型JButton?
- 23. 將強類型對象轉換爲匿名類型
- 24. 將字符串類型值轉換爲對象類型VBS
- 25. 如何將對象類型轉換爲短類型? (C#)
- 26. 將類型字符串轉換爲類型對象
- 27. 如何在Java中將對象類型轉換爲int類型?
- 28. 如何將「ppp」對象轉換爲多類型對象?
- 29. 如何將對象類型列表轉換爲對象數組
- 30. 將對象轉換爲其他類型,包括對象列表
您使用的是通用名單? –
是的。我正常使用它。 – user35443
羽絨服是我尋找的解決方案。如果要存儲普通學生以及 – user35443