2009-04-22 9 views
0

ここで、 'BOOL()'メソッドはブール値を返します。 今私はDateTime値を返すのと同じことをする必要があります。私が使用すると、 'DATETIME()'はDateTime値を返します。C#codeDomのSystem.DateTimeにCodeObjectCreateExpressionを使用する方法

new CodePrimitiveExpression(DATETIME()); 

ここで、 'DATETIME()'はDateTime値を返します。 私はCodePrimitiveExpressionをしようとしたときしかし、私は、どのように私はDateTime値を取得するためにCodeObjectExpressionを使用することができます

Invalid Primitive Type: System.DateTime. Consider using CodeObjectCreateExpression. 

、以下の例外が発生しましたか。?

ここにコードスニペットが添付されています。

if (p.ParameterType == typeof(System.Boolean)) 
       return new CodeVariableDeclarationStatement(p.ParameterType, options.sVariableNamePrix + p.Name, 
        new CodePrimitiveExpression(BOOL())); 
else if (p.ParameterType == typeof(System.DateTime)) 
       return new CodeVariableDeclarationStatement(p.ParameterType, options.sVariableNamePrix + p.Name, 
        // new CodeObjectCreateExpression(DATETIME())); 

答えて

0

あなたは、そのコンストラクタに渡すオブジェクト(この場合はDateTime)とパラメータ(複数可)のタイプを指定する必要があります。

DATETIME()メソッドから返された値を生成された宣言で使用する場合は、おそらくDateTime(long ticks, DateTimeKind kind)コンストラクタを使用するのが最も簡単です。

コメントに応答して
// ... 
else if (p.ParameterType == typeof(System.DateTime)) 
{ 
    DateTime dt = DATETIME(); 

    var ticks = new CodePrimitiveExpression(dt.Ticks); 
    var kind = new CodeFieldReferenceExpression 
     (
      new CodeTypeReferenceExpression("System.DateTimeKind"), 
      dt.Kind.ToString() 
     ); 

    return new CodeVariableDeclarationStatement 
     (
      p.ParameterType, 
      options.sVariableNamePrix + p.Name, 
      new CodeObjectCreateExpression("System.DateTime", ticks, kind) 
     ); 
} 

EDIT ...

あなたが発生した宣言は、あなたのDATETIME()メソッドから返された値を使用したい場合は、その値がDateTimeオブジェクトのコンストラクタに渡される必要がありますどういうわけか。

DateTime(long ticks, DateTimeKind kind) constructorは、その値を正確に表すことができる最も簡単なコンストラクタであるため、DateTime(long ticks, DateTimeKind kind) constructorを選択しました。 (any of the other constructorsを使用すると、いずれかのより複雑な以下の正確な例を作っていると思います。)

が同じDateTime表すためにTicksDateTimeKindだけである別の方法を使用する:

DateTime dt1 = 
    new DateTime(630822816000000000, System.DateTimeKind.Unspecified); 

DateTime dt2 = DateTime.Parse("1/1/2000 12:00:00 AM"); 

Console.WriteLine(dt1);   // displays "01/01/2000 00:00:00" 
Console.WriteLine(dt2);   // displays "01/01/2000 00:00:00" 
Console.WriteLine(dt1 == dt2); // displays "True" 
+0

私のDATETIME方法は、この「1のようなものを返します。/1/2000 12:00:00 AM 'を使用する必要があります。また、「ダニ」と「種類」について説明することもできます。私はあなたのコードを試してみましたが、このようなものがあります。 '630822816000000000、System.DateTimeKind.Unspecified' – SyncMaster

関連する問題