C# 'System.StackOverflowException'
C# 'System.StackOverflowException'
我是 C# 新手。我正在尝试创建一个名为 'Product' 的 class。它有一些名为“productName”、“discountRate”、“productPrice”的变量。我想使用 productPrice(例如 6000)和 discountRate(例如 10)来计算新价格。如果 discountRate 为 0,那么它应该 return productPrice,如果 discountRate 不为 0,那么它应该 return 新价格。
产品价格 - ((产品价格 * discountRate) / 100)
但是我收到这个错误:
An unhandled exception of type 'System.WhosebugException'
occurred in Class_intro.dll
这是我的代码:
using System;
namespace Class_intro
{
class Program
{
static void Main(string[] args)
{
Product product1 = new Product();
product1.productName = "Huawei Notebook";
product1.discountRate = 10;
product1.productPrice = 6000;
Product product2 = new Product();
product2.productName = "Lenovo Notebook";
product2.discountRate = 25;
product2.productPrice = 4000;
Product[] products = new Product[] { product1, product2 };
foreach (var product in products)
{
Console.WriteLine("Product Name: " + product.productName
+ "\nProduct Price: " + product.productPrice
+ "\nDiscount Rate: " + product.discountRate
+ "\n-----------------");
}
}
}
class Product
{
public string productName { get; set; }
public int discountRate { get; set; }
public double productPrice
{
get
{
if (discountRate == 0)
{
return productPrice;
}
else
{
return productPrice - ((productPrice * discountRate) / 100);
}
}
set { productPrice = value; }
}
}
}
为了清楚起见,您需要为您的产品价格提供支持字段 属性:
class Product
{
public string ProductName { get; set; }
public int DiscountRate { get; set; }
private double productPrice;
public double ProductPrice
{
get
{
if (DiscountRate == 0)
{
return productPrice;
}
else
{
return productPrice - ((productPrice * DiscountRate) / 100);
}
}
set { productPrice = value; }
}
}
通常我对属性使用句子大小写,对私有字段的开头使用 _,但是对于私有字段以小写开头的驼峰式大小写同样有效。最好选择一些东西并坚持下去。
您需要声明另一个 double 来保存您的“productPrice”值,您可以 return 在 get 上这样做,并按计划在 set 上设置它。
试试这个:
using System;
namespace Class_intro
{
class Program
{
static void Main(string[] args)
{
Product product1 = new Product();
product1.productName = "Huawei Notebook";
product1.discountRate = 10;
product1.ProductPrice = 6000;
Product product2 = new Product();
product2.productName = "Lenovo Notebook";
product2.discountRate = 25;
product2.ProductPrice = 4000;
Product[] products = new Product[] { product1, product2 };
foreach (var product in products)
{
Console.WriteLine("Product Name: " + product.productName
+ "\nProduct Price: " + product.ProductPrice
+ "\nDiscount Rate: " + product.discountRate
+ "\n-----------------");
}
}
}
class Product
{
public string productName { get; set; }
public int discountRate { get; set; }
private double productPrice;
public double ProductPrice
{
get
{
if (discountRate == 0)
{
return productPrice;
}
else
{
return productPrice - ((productPrice * discountRate) / 100);
}
}
set { productPrice = value; }
}
}
}
错误的原因是在getter和setter中都引用了属性,这导致了无限循环,但是你的设计有点混乱,因为你使用了“毛”产品价格和“折扣”产品价格相同 属性。我只会对产品价格使用普通的 属性,对折扣价使用单独的只读 属性。这也摆脱了无限循环:
class Product
{
public string productName { get; set; }
public int discountRate { get; set; }
public double productPrice {get; set;}
public double discountedPrice
{
get
{
return productPrice - ((productPrice * discountRate) / 100);
}
}
}
请注意,您不需要 if (discountRate == 0)
大小写,因为在数学上它是相同的,但如果您想将它保留在那里以提高可读性,那很好。
我是 C# 新手。我正在尝试创建一个名为 'Product' 的 class。它有一些名为“productName”、“discountRate”、“productPrice”的变量。我想使用 productPrice(例如 6000)和 discountRate(例如 10)来计算新价格。如果 discountRate 为 0,那么它应该 return productPrice,如果 discountRate 不为 0,那么它应该 return 新价格。
产品价格 - ((产品价格 * discountRate) / 100)
但是我收到这个错误:
An unhandled exception of type 'System.WhosebugException' occurred in Class_intro.dll
这是我的代码:
using System;
namespace Class_intro
{
class Program
{
static void Main(string[] args)
{
Product product1 = new Product();
product1.productName = "Huawei Notebook";
product1.discountRate = 10;
product1.productPrice = 6000;
Product product2 = new Product();
product2.productName = "Lenovo Notebook";
product2.discountRate = 25;
product2.productPrice = 4000;
Product[] products = new Product[] { product1, product2 };
foreach (var product in products)
{
Console.WriteLine("Product Name: " + product.productName
+ "\nProduct Price: " + product.productPrice
+ "\nDiscount Rate: " + product.discountRate
+ "\n-----------------");
}
}
}
class Product
{
public string productName { get; set; }
public int discountRate { get; set; }
public double productPrice
{
get
{
if (discountRate == 0)
{
return productPrice;
}
else
{
return productPrice - ((productPrice * discountRate) / 100);
}
}
set { productPrice = value; }
}
}
}
为了清楚起见,您需要为您的产品价格提供支持字段 属性:
class Product
{
public string ProductName { get; set; }
public int DiscountRate { get; set; }
private double productPrice;
public double ProductPrice
{
get
{
if (DiscountRate == 0)
{
return productPrice;
}
else
{
return productPrice - ((productPrice * DiscountRate) / 100);
}
}
set { productPrice = value; }
}
}
通常我对属性使用句子大小写,对私有字段的开头使用 _,但是对于私有字段以小写开头的驼峰式大小写同样有效。最好选择一些东西并坚持下去。
您需要声明另一个 double 来保存您的“productPrice”值,您可以 return 在 get 上这样做,并按计划在 set 上设置它。
试试这个:
using System;
namespace Class_intro
{
class Program
{
static void Main(string[] args)
{
Product product1 = new Product();
product1.productName = "Huawei Notebook";
product1.discountRate = 10;
product1.ProductPrice = 6000;
Product product2 = new Product();
product2.productName = "Lenovo Notebook";
product2.discountRate = 25;
product2.ProductPrice = 4000;
Product[] products = new Product[] { product1, product2 };
foreach (var product in products)
{
Console.WriteLine("Product Name: " + product.productName
+ "\nProduct Price: " + product.ProductPrice
+ "\nDiscount Rate: " + product.discountRate
+ "\n-----------------");
}
}
}
class Product
{
public string productName { get; set; }
public int discountRate { get; set; }
private double productPrice;
public double ProductPrice
{
get
{
if (discountRate == 0)
{
return productPrice;
}
else
{
return productPrice - ((productPrice * discountRate) / 100);
}
}
set { productPrice = value; }
}
}
}
错误的原因是在getter和setter中都引用了属性,这导致了无限循环,但是你的设计有点混乱,因为你使用了“毛”产品价格和“折扣”产品价格相同 属性。我只会对产品价格使用普通的 属性,对折扣价使用单独的只读 属性。这也摆脱了无限循环:
class Product
{
public string productName { get; set; }
public int discountRate { get; set; }
public double productPrice {get; set;}
public double discountedPrice
{
get
{
return productPrice - ((productPrice * discountRate) / 100);
}
}
}
请注意,您不需要 if (discountRate == 0)
大小写,因为在数学上它是相同的,但如果您想将它保留在那里以提高可读性,那很好。