Как бросить объект ввести описанный классом Типа?

Используйте эту формулу для перехода от даты Excel к дате Unix, затем вы можете использовать «gmdate», чтобы получить реальную дату в PHP:

UNIX_DATE = (EXCEL_DATE - 25569) * 86400

и конвертировать из даты Unix в дату Excel , используйте эту формулу:

EXCEL_DATE = 25569 + (UNIX_DATE / 86400)

После выполнения этой формулы в переменную вы можете получить реальную дату в PHP, используя этот пример:

$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400;
echo gmdate("d-m-Y H:i:s", $UNIX_DATE);

Спасибо.

27
задан Tomasz Smykowski 30 July 2009 в 12:46
поделиться

5 ответов

Сейчас это кажется невозможным, но скоро будет доступна новая функция в .NET 4.0 под названием «динамический»:

http://www.codeguru.com/vb/vbnet30 /article.php/c15645__4/[1221 impression

1
ответ дан 28 November 2019 в 05:53
поделиться
1113 Обычно желание сделать это указывает на недоразумение. Однако есть очень редкие законные причины для этого. Это зависит от того, будет ли это эталонное преобразование по сравнению с распаковкой или пользовательским преобразованием.

Если это эталонное преобразование, это означает, что фактическое значение (эталон) останется полностью неизменным. Все, что делает приведение в действие, выполняет проверку, а затем копирует значение. Это не имеет никакого реального использования - вы можете выполнить проверку, используя вместо этого Type.IsAssignableFrom, и просто использовать неявное приведение к object, если хотите получить его в переменной типа object.

Основная цель приведения - предоставить компилятору больше информации. Теперь, если вы знаете только тип во время выполнения , это явно не поможет компилятору.

Что вы планируете делать с o после того, как вы выполнили приведение? Если вы можете объяснить это, мы можем попытаться объяснить, как добиться желаемого эффекта.

Если вы действительно хотите, чтобы преобразование, определенное пользователем, или распаковка происходило, это могло быть другим вопросом - но я подозреваю , что это не так.

РЕДАКТИРОВАТЬ: После просмотра вашего обновления ваша собственность только что была объявлена ​​возвращающей CustomClass, поэтому все, что вам нужно, это:

public CustomClass MyClassOuter
{
   get
   {
        return (CustomClass) otherClass;
   }
}

Я подозреваю, что вы до сих пор не предоставили нам всю информацию, которую мы необходимость. Это определенно , как будет определяться ваше свойство, с CustomClass определенного типа? Почему вы пытались выполнить приведение динамически, когда вы знаете тип свойства?

РЕДАКТИРОВАТЬ: Похоже, вы просто пытаетесь сохранить некоторые набрав - чтобы было легче вырезать и вставлять. Не. Вы знаете тип во время компиляции, потому что вы знаете тип свойства во время компиляции (он указан в коде всего несколькими строками выше). Используйте этот тип напрямую. Точно так же не пытайтесь получить имя текущего метода, чтобы определить ключ для использования. Просто введите имя напрямую. Опять же, вы знаете это во время компиляции, так зачем быть динамичным? Я все за лень, когда это имеет смысл, но в этом случае это просто не так.

3
ответ дан Jon Skeet 15 October 2019 в 06:35
поделиться

Я не совсем уверен, что вы пытаетесь сделать, но у меня сложилось впечатление, что вы хотели бы иметь один экземпляр какого-либо объекта, который может «вести себя как» множество различных типов объектов, и вы хотите иметь геттеры, которые позволят вам очень легко просматривать один и тот же объект различными способами. В этом случае я бы предложил создать один метод получения (не свойство), например, так:

public T Get<T>()
{
   return (T)myObject;
}

Тогда вы бы назвали его так:

Foo foo = box.Get<Foo>();
Bar bar = box.Get<Bar>();
// etc...

Две вещи для примечание: это определенно не безопасно для типов, так как вы можете передать любой тип для T, включая типы, для которых приведение не удастся. Вы можете немного ограничить это, например, так:

public T Get<T>() where T : SomeBaseType

, что приведет к ошибке компиляции, если вы попытаетесь использовать тип, несовместимый с SomeBaseType, но я не уверен, что он полностью устойчив. Но, надеюсь, это поможет вам пройти большую часть пути.

Это то, что вы имели в виду?

1
ответ дан gzak 15 October 2019 в 06:35
поделиться
if (ex is ExampleClass) 
{
  ExampleClass myObject = (ExampleClass)ex;
}

Это сработает, но я думаю, вопрос в том, чего вы пытаетесь достичь и почему? Я часто замечаю, что если что-то кажется действительно действительно трудным, то я, вероятно, делаю это неправильно.

0
ответ дан 28 November 2019 в 05:53
поделиться
Object o = (TargetType) ex;

Этот код бесполезен. У вас может быть текст справа, но это по-прежнему всего лишь объект с левой стороны. Вы не можете использовать функции, специфичные для TargetType, как это.


Вот как вы можете вызвать метод неизвестного объекта данного типа:

object myObject = new UnknownType();
Type t = typeof(UnknownType); // myObject.GetType() would also work
MethodInfo sayHelloMethod = t.GetMethod("SayHello");
sayHelloMethod.Invoke(myObject, null);

С помощью этого класса UnknownType:

class UnknownType
{
    public void SayHello()
    {
        Console.WriteLine("Hello world.");
    }
}
11
ответ дан 28 November 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: