public class Customer
    {
        public int CustomerId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    public struct Customer
    {
        public int CustomerId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
我最近遇到了这个Stackoverflow问题:何时使用struct?
在其中,它有一个答案,说了一些有点深刻的东西:
另外,要意识到当一个struct实现一个接口 - 就像Enumerator那样 - 并且被强制转换为该实现类型时,该struct将成为一个引用类型并被移动到堆中.在Dictionary类的内部,Enumerator仍然是一个值类型.但是,只要方法调用GetEnumerator(),就会返回引用类型的IEnumerator.
这究竟是什么意思?
如果我有类似的东西
struct Foo : IFoo 
{
  public int Foobar;
}
class Bar
{
  public IFoo Biz{get; set;} //assume this is Foo
}
...
var b=new Bar();
var f=b.Biz;
f.Foobar=123; //What would happen here
b.Biz.Foobar=567; //would this overwrite the above, or would it have no effect?
b.Biz=new Foo(); //and here!?
究竟什么值类型结构的详细语义被视为引用类型?
我正在使用ASP.NET C#.
如何实现类似于StackOverflow.com的URL重写过程?
http://stackoverflow.com/questions/358630/how-to-search-date-in-sql
此外,URL中的"358630"等值的含义是什么?这是问题ID(他们用来从表中获取数据的基础)?无论是什么,在我的应用程序中,我使用"ID"字段识别记录.该字段是SQL表中的标识列.现在,我的网址如下:
http://myweb.com/showdetails.aspx?id=9872
但我希望他们看起来像:
http://myweb.com/showdetails/9872/my_question_title
要么:
http://myweb.com/9872/my_question_title
或者无论什么最好的方式,这将很好地搜索机器人.
我的应用程序托管在Go Daddy的共享托管服务上,我觉得没有自定义的ASP.NET"HTTP模块"或没有用于URL重写的自定义DLL正在他们的服务器上运行.我尝试了很多样品,但没有运气!
我发现Stack Overflow托管在Go Daddy(共享主机?)上.也许Stack Overflow的方法对我有用.
我最近发现了C# 中的关键字,并且发现如果我理解正确的话,record它可以用作值类型而不是引用类型。record struct
但是,我很难理解何时确切使用而record struct不仅仅是struct. 据我所知,record struct具有一些结构没有的基本实现(例如==and!=运算符、对 的重写ToString以及其他一些东西),但这就是两者之间的区别吗?如果不是,在决定使用其中一种时需要考虑什么?
从我目前看到的方式来看,最好始终使用record structjust 来利用它已经附带的那些实现。
我的问题是:
还请讨论每个的优点和缺点.我也想了解这一点.
我有一个开始生活可变的课程,但我已经让它变得一成不变.我应该改成它struct吗?选择一个而不是另一个需要考虑哪些因素?我的特殊情况是一个Point类型类(它代表一个自定义坐标系中的坐标),由4个int字段组成,加上一些属性以不同的方式访问相同的数据.我注意到这String是一个类并且是不可变的,因此必须有一些用例.
在代码检查过程中意外注释掉函数中的一行时,我注意到我的代码有些奇怪的行为。复制非常困难,但在此我将描述一个类似的示例。
我有这个测试课:
public class Test
{
    public void GetOut(out EmailAddress email)
    {
        try
        {
            Foo(email);
        }
        catch
        {
        }
    }
    public void Foo(EmailAddress email)
    {
    }
}
没有分配给的电子邮件GetOut,通常会引发错误:
必须在控制离开当前方法之前将out参数'email'分配给
但是,如果EmailAddress在单独程序集中的结构中,则不会创建错误,并且一切都可以正常编译。
public struct EmailAddress
{
    #region Constructors
    public EmailAddress(string email)
        : this(email, string.Empty)
    {
    }
    public EmailAddress(string email, string name)
    {
        this.Email = email;
        this.Name = name;
    }
    #endregion
    #region Properties
    public string Email { get; private set; }
    public string Name { get; private set; }
    #endregion
} …我在asp.net中遇到了几种编写业务逻辑的方法,但我想知道下面的两个例子,使用struct来存储类变量有什么好处:
namespace Shopping
{
   public struct ShoppingCart
   {
       public string Color;
       public int ProductId;
   }
   public partial class MyShoppingCart 
   {
       public decimal GetTotal(string cartID)
       {
       }
       // Some other methods ...
   }
}
namespace Shopping
{
   public partial class MyShoppingCart 
   {
       public string Color{ get; set; }
       public int ProductId{ get; set; }
       public decimal GetTotal(string cartID)
       {
       }
       // Some other methods ...
   }
}
我一直在干扰C#中的一个想法来创建一个软件(用于伪个人使用),但遇到了实现问题.嗯......也许他们是我不知道的设计问题,但我只是简直无法弄清楚.
考虑我们有以下"数据库":
Foo + Bar = Foobar
Baz + Qux = Bazqux
Foobar + Bazqux = Foobarbazqux
这些是用于创建所述项目的配方.使用一个和一个,我们创建一个结果,可以进一步成为另一个食谱的成分.FooBarFoobar 
现在想我们需要找出该项目的完整配方Foobarbazqux.对于人类的思想和智慧,它相对容易:
We need Foobarbazqux
Foobarbazqux = Foobar + Bazqux
    Foobar = Foo + Bar
    Bazqux = Baz + Qux
Foobarbazqux = Foo + Bar + Baz + Qux
当然,如果我们拥有所有成分,我们可以"运行" 配方,并按照上面几段的顺序创建项目并执行每个配方.(那样:我们首先创建Foobar,然后Bazqux将两者结合起来得到最终结果.)
但在现实的时候,数据库是很多大.我想这就是计算机应该进入的地方.通过一个可用的软件,机器可以轻松找到所有的成分和执行(制作)步骤并将其提供给用户,因此我们不需要通过所有条目来读取手.
c# ×10
struct ×3
.net ×2
value-type ×2
algorithm ×1
asp.net ×1
boxing ×1
c#-10.0 ×1
c#-9.0 ×1
class-design ×1
immutability ×1
recursion ×1
solver ×1
web-config ×1