Итак, я сейчас работаю над переписыванием VB. NET приложения, над которым я работал C# (для обновления), и я наткнулся на небольшую загадку, которая мне не кажется выяснить. Я пытаюсь циклически просмотреть свойства объектов, получить все свойства типа CustomList и запустить метод Save для каждого.
VB. NET Код для CustomList
Friend Class CustomList(Of T)
Inherits List(Of T)
Private ReadOnly Property FileName As String
Get
Return GetType(T).ToString + ".json"
End Get
End Property
Private ReadOnly Property Campaign As Campaign
Private ReadOnly Property FilePath As String
Get
Return Source.SourcePath + FileName
End Get
End Property
Public Sub New(source As Source)
_Source= source
If IO.File.Exists(FilePath) Then Me.AddRange(JSON_Functions.LoadJSONObject(Of CustomList(Of T))(FilePath))
End Sub
Public Sub New(objList As List(Of T))
Me.AddRange(objList)
End Sub
Public Sub Save()
JSON_Functions.SaveJsonObject(FilePath, Me)
End Sub
End Class
C# Код для пользовательского списка
public class CustomList<T> : List<T>
{
private static string FileName { get { return typeof(T).Name + ".json"; } }
private Source Source { get; set; }
private static string FilePath { get { return Source.Path + FileName; } }
public CustomList(Source source)
{
this.Source = source;
if (File.Exists(FilePath))
this.AddRange(GlobalElements.JSON_Functions.LoadJsonObject<CustomList<T>>(FilePath));
}
public CustomList(List<T> objList) { this.AddRange(objList); }
public void Save() { GlobalElements.JSON_Functions.SaveJsonObject(FilePath, this); }
}
Я пытаюсь вызвать команду Сохранить для каждого свойства CustomList, но ничего не зашло в тупик. В VB. NET я смог сделать это относительно простым способом, но в C# я не нашел ничего эквивалентного.
Моя конечная цель - сохранить Object1List, Object2List, Object3List, et c. через al oop вместо того, чтобы вызывать каждое свойство Сохранить метод индивидуально.
VB. NET Код для методов сохранения (это обрабатывает любой общий список c, но я все еще могу вызвать метод без отдельного определения объекта VB.NETS)
Public ReadOnly Property Object1List As CustomList(Of Object1)
Public ReadOnly Property Object2List As CustomList(Of Object2)
Public ReadOnly Property Object3List As CustomList(Of Object3)
//other code stuffs
Public Sub SaveCampaign()
For Each p As PropertyInfo In Me.GetType.GetProperties
If GetType(IList).IsAssignableFrom(p.PropertyType) AndAlso p.PropertyType.IsGenericType Then p.GetValue(Me).Save()
Next
End Sub
C# Код для методов сохранения
public CustomList<Object1> Object1List { get; private set; }
public CustomList<Object2> Object2List { get; private set; }
public CustomList<Object3> Object3List { get; private set; }
//Other Code Stuff
public void SaveSource()
{
foreach (PropertyInfo p in this.GetType().GetProperties())
{
if (typeof(IList).IsAssignableFrom(p.PropertyType) && p.PropertyType.IsGenericTypeDefinition)
p.GetValue(this).Save();
}
}
Возвращает ошибку при p.GetValue(this).Save();
:
'object' does not contain a definition for 'Save' and no accessible extension method 'Save' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
Самая большая причина, по которой я хочу выполнить sh, заключается в том, что у меня может быть 10+ CustomList и я не хочу перечислять их каждый раз.
Если кто-то может дать какой-то совет, я был бы очень признателен !!!