Здравствуйте, Visor2004, Вы писали:
V>subj конструкция не пашет... все время возвращается false, хотя target — это ICollection[T]. Это так должно быть?
Так оно пашет по видимому изза того, что ICollection[_] превращается в ICollection[object].
Здравствуйте, Visor2004, Вы писали:
V>subj конструкция не пашет... все время возвращается false, хотя target — это ICollection[T]. Это так должно быть?
Если мне не изменяет память в дотнете нельзя сделать обобщенную проверку типов. Пиши ICollection[T] или ICollection[int], тогда будет работать.
Вот в макросах так можно проверять.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Visor2004, Вы писали:
V>subj конструкция не пашет... все время возвращается false, хотя target — это ICollection[T]. Это так должно быть?
Ну так экзистенциальных типов Nemerle нет. _ просто означает, что тип должен быть выведен при компиляции.
Здравствуйте, Visor2004, Вы писали:
V>subj конструкция не пашет... все время возвращается false, хотя target — это ICollection[T]. Это так должно быть?
Т.е. проверить является ли тип коллекцией я могу только так?
Здравствуйте, Visor2004, Вы писали:
VD>>Нужна динамическая проверка типов, или хватит статической (во время компиляции)?
V>надо динамически в рантайме.
Тогда только через рефлексию.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, BogdanMart, Вы писали:
BM>Напиши макрос.. должно быть не сложно BM>typecheck( o, ICollection[_]) BM>а макросс развернуть в рефлексионную проверку
Меня тут волнует вопрос производительности, а не красоты Если альтернатив рефлексии нету, то меня и GetInterface устроит.
Здравствуйте, Visor2004, Вы писали:
V>Меня тут волнует вопрос производительности, а не красоты :) Если альтернатив рефлексии нету, то меня и GetInterface устроит.
Вопрос производительности можно решить тупо мемоизируя проверки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, catbert, Вы писали:
C>Я бы политкорректно выразился "так же, как в С#".
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
dynamic list = new List<int>();
if(Implements.GenericICollection(list))
{
Console.WriteLine("ICollection<T>");
}
}
}
static class Implements
{
public static bool GenericICollection<T>(ICollection<T> obj) { return true; }
public static bool GenericICollection(object obj) { return false; }
}