c# - solo - double con 2 decimales vb net
Cómo establecer un valor decimal constante (4)
Debes colocar 440 entre comillas, así:
[ConfigurationProperty("paymentInAdvanceAmount", DefaultValue = "440")]
Estoy usando C # para establecer un valor predeterminado para un valor decimal en mi clase de configuración
public class ConfigSection : ConfigurationSection
{
[ConfigurationProperty("paymentInAdvanceAmount", **DefaultValue = 440m**)]
public decimal PaymentInAdvanceAmount
{
get { return (decimal)base["paymentInAdvanceAmount"]; }
set { base["paymentInAdvanceAmount"] = value; }
}
}
Pero no será compilado y arrojará un error.
Un argumento de atributo debe ser una expresión constante, tipo de expresión
Encontré que una publicación dice: "No es un error". "1000M" es simplemente una abreviatura de "nuevo decimal (1000)", que implica una llamada a un método, lo que significa que no se considera una constante. constante la mayor parte del tiempo, no significa que puedas todo el tiempo ".
Ahora, ¿cómo lo soluciono?
Descubrí que si establecía un valor predeterminado para una propiedad decimal y especificaba ese valor entre comillas, no funcionaba para mí con un control de WinForms y .NET 3.5.
Cuando hice clic derecho en la propiedad en la ventana de "Propiedades" del diseñador y seleccioné la opción "Restablecer", recibí el mensaje "Objeto de tipo ''System.String'' no se puede convertir al tipo ''System.Decimal''.
Para que funcionara tuve que usar el mismo código que tphaneuf sugirió, es decir,
[DefaultValue(typeof(Decimal), "440")]
public decimal TestValue { get; set; }
Finalmente lo descubrí. Ingresé "440" en lugar de 440m o 440. Se compiló y funciona bien.
Solo usa 440 y deja fuera la ''M''. No obtengo errores de compilación, y este programa funciona como se esperaba:
namespace WindowsApplication5
{
public partial class Form1 : Form
{
public Form1( )
{
InitializeComponent( );
AttributeCollection attributes =
TypeDescriptor.GetProperties( mTextBox1 )[ "Foo" ].Attributes;
DefaultValueAttribute myAttribute =
( DefaultValueAttribute ) attributes[ typeof( DefaultValueAttribute ) ];
// prints "440.1"
MessageBox.Show( "The default value is: " + myAttribute.Value.ToString( ) );
}
}
class mTextBox : TextBox
{
private decimal foo;
[System.ComponentModel.DefaultValue( 440.1 )]
public decimal Foo
{
get { return foo; }
set { foo = value; }
}
}
}