sizeof
будет работать только с типами значений.
Для строки вы не будете знать фактический размер байта, пока не заполните его.
Если вы настроены на это, сериализуйте список и измерьте его. Хотя это и не гарантированный способ, но, вероятно, лучше, чем альтернатива. Поцарапайте это. Это не даст вам то, что вы хотите без каких-либо реальных усилий, если вообще. Вы можете выполнить быстрый и грязный подсчет, например, так:
public int getListSize()
{
Type type = typeof(T);
if (type.IsEnum)
{
return this.Sum(item => Marshal.SizeOf(Enum.GetUnderlyingType(type)));
}
if (type.IsValueType)
{
return this.Sum(item => Marshal.SizeOf(item));
}
if (type == typeof(string))
{
return this.Sum(item => Encoding.Default.GetByteCount(item.ToString()));
}
return 32 * this.Count;
}
Если вы действительно хотите узнать больше о размере, вот исчерпывающий ответ по теме.