ImはC#のジェネリックスに新しく、プログラムの他の部分でモデルオブジェクトを要求できるストレージを作成しようとしています。 私のキャッシュクラスにオブジェクトがある場合、そのオブジェクトの日付がチェックされ、オブジェクトが10分以上経過していない場合は返されます。 10分以上経過している場合は、サーバーからオンラインで更新されたモデルをダウンロードします。 オブジェクトをダウンロードして返します。オブジェクトをキャッシュするクラスを作成するにはどうすればよいですか?
しかし、私はDateTimeと私のオブジェクトをペアにする問題を抱えています。
// model
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person p = new Person();
Cache c = new Cache();
p = c.Get<Person>(p);
}
}
public class Cache
{
struct DatedObject<T>
{
public DateTime Time { get; set; }
public T Obj { get; set; }
}
List<DatedObject<T>> objects;
public Cache()
{
objects = new List<DatedObject<T>>();
}
public T Get<T>(T obj)
{
bool found = false;
// search to see if the object is stored
foreach(var elem in objects)
if(elem.ToString().Equals(obj.ToString()))
{
// the object is found
found = true;
// check to see if it is fresh
TimeSpan sp = DateTime.Now - elem.Time;
if(sp.TotalMinutes <= 10)
return elem;
}
// object was not found or out of date
// download object from server
var ret = JsonConvert.DeserializeObject<T>("DOWNLOADED JSON STRING");
if(found)
{
// redate the object and replace it in list
foreach(var elem in objects)
if(elem.Obj.ToString().Equals(obj.ToString()))
{
elem.Obj = ret;
elem.Time = DateTime.Now;
}
}
else
{
// add the object to the list
objects.Add(new DatedObject<T>() { Time = DateTime.Now, Obj = ret });
}
return ret;
}
}
オブジェクトをペアにする際の問題/エラーの詳細を教えてください。おそらく、あなたは 'DatedObject'の構造の代わりにクラスを試してみることができます。独自のクラスオブジェクトを作成したくない場合は、Tuple – Rex
[Akavache](https://github.com/github/Akavache)が価値があるかもしれませんに。 –