小编Oli*_*ver的帖子

私有成员可以从同一个类的其他实例访问

我刚才注意到了一些我以前从未意识到的东西.事实证明这个类在C#中是有效的:

class Foo
{
    private string contents;

    public Foo(string str) {
        contents = str;
    }

    public void set(Foo other)
    {
        contents = other.contents;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,同一类的不同实例可以访问彼此的私有成员.

直到现在,我认为对象的私有成员只能被该对象访问,而不能被同一类的其他实例访问.发现这一点有点令人惊讶.

所有常见的面向对象语言都是这种情况吗?这对我来说并不直观.

oop

14
推荐指数
2
解决办法
3549
查看次数

foreach with SqlDataReader?

我有以下代码:

SqlDataReader reader = getAddressQuery.sqlReader;
while (reader.Read())
{
    foreach (Object ob in reader)
    {
        someText.InnerText = someText.InnerText + " " + ob.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

foreach循环中的代码不会执行.但是,我可以这样做:

SqlDataReader reader = getAddressQuery.sqlReader;
while (reader.Read())
{
    someText.InnerText = reader[0].ToString();
}
Run Code Online (Sandbox Code Playgroud)

哪个有效.

显然我可以使用常规for循环而不是foreach循环来实现相同的结果,但我认为foreach语法更清晰,所以我尽可能使用它.

这里出了什么问题?c#中的foreach循环不像更高级语言那样灵活吗?

c#

12
推荐指数
2
解决办法
4万
查看次数

计数和容量有多快?

我经常写这样的代码:

if ( list.Count > 0 ) { }
Run Code Online (Sandbox Code Playgroud)

这有效吗?此操作是否如下所示:

  • 遍历列表并计算其元素
  • 结果:986,000个元素
  • 986,000大于0吗?
  • 返回true

或者像这样:

  • 检索列表中存储的元素数(986,000)
  • 986,000大于0吗?
  • 返回true

也就是说,要获得列表中的元素数量,您是否必须在列表中一直计算,或者是在某处记录的元素数量?这是所有ICollection课程的情况吗?

怎么样的Capacity名单呢?

c#

11
推荐指数
2
解决办法
2033
查看次数

在pandas中为groupby的结果添加'count'列?

我认为这是一个相当基本的问题,但我似乎无法找到解决方案.

我有一个类似于以下的pandas数据帧:

import pandas as pd

df = pd.DataFrame({'A' : ['x','x','y','z','z'],
                   'B' : ['p','p','q','r','r']})
df
Run Code Online (Sandbox Code Playgroud)

这会创建一个这样的表:

    A   B
0   x   p
1   x   p
2   y   q
3   z   r
4   z   r
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个表,表示该数据帧中不同值的数量.所以我的目标是这样的:

    A   B   c
0   x   p   2
1   y   q   1
2   z   r   2
Run Code Online (Sandbox Code Playgroud)

但是,我无法找到正确的功能来实现这一目标.我试过了:

df.groupby(['A','B']).agg('count')
Run Code Online (Sandbox Code Playgroud)

这将生成一个包含3行(如预期)但没有"count"列的表.我不知道如何添加count计数列.有人能指出我正确的方向吗?

python pandas

11
推荐指数
2
解决办法
2万
查看次数

无法在响应中添加"Vary"标头

我正在尝试为Vary: Accept-Encoding我压缩的文件添加一个标头,如前所述.

但是,由于某种原因,无法从Visual Studio测试服务器或IIS服务器进行此操作.

我有以下代码:

if (url.Contains(".js") || url.Contains(".aspx") || url.Contains(".css"))
{
    app.Response.AppendHeader("Vary", "Accept-Encoding");
    app.Response.AppendHeader("Varye", "Accept-Encoding"); // for testing
    app.Response.AppendHeader("Varye", "Accept-Things");   // for testing
    app.Response.AppendHeader("Vary", "Accept-Stuff");     // for testing
    app.Response.AppendHeader("Var", "Accept-Items");      // for testing

    encodings = encodings.ToLower();

    if (encodings.Contains("gzip") || encodings == "*")
    {
        app.Response.Filter = new GZipStream(baseStream, CompressionMode.Compress);
        app.Response.AppendHeader("Content-Encoding", "gzip");

    }
}
Run Code Online (Sandbox Code Playgroud)

这导致以下响应头:

Status=OK - 200
Server=ASP.NET Development Server/10.0.0.0
Date=Fri, 21 Oct 2011 12:24:11 GMT
X-AspNet-Version=4.0.30319
Varye=Accept-Encoding, Accept-Things
Var=Accept-Items
Content-Encoding=gzip
Cache-Control=public
Etag="1CC8F2E9D772300"
Content-Type=text/css
Content-Length=16200
Connection=Close …
Run Code Online (Sandbox Code Playgroud)

c# asp.net http-headers

10
推荐指数
2
解决办法
6067
查看次数

MVVM light Messenger中的操作,局部变量和垃圾收集的奇怪行为

Messenger对MVVM Light中的系统有一个非常奇怪的问题.这很难解释,所以这里有一个小程序来演示这个问题:

using System;
using GalaSoft.MvvmLight.Messaging;

namespace TestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var prog = new Program();
            var recipient = new object();

            prog.RegisterMessageA(recipient);
            prog.RegisterMessageB(recipient);

            prog.SendMessage("First Message");
            GC.Collect();
            prog.SendMessage("Second Message");
        }

        public void RegisterMessageA(object target)
        {
            Messenger.Default.Register(this, (Message msg) =>
            {
                Console.WriteLine(msg.Name + " recieved by A");
                var x = target;
            });
        }

        public void RegisterMessageB(object target)
        {
            Messenger.Default.Register(this, (Message msg) =>
            {
                Console.WriteLine(msg.Name + " received by B");
            });
        }

        public void SendMessage(string …
Run Code Online (Sandbox Code Playgroud)

c# wpf garbage-collection mvvm mvvm-light

9
推荐指数
1
解决办法
916
查看次数

在wpf中快速生成ViewModel属性?

阅读本文后,我的PersonViewModel课程中有以下代码:

public Jurisdiction CountryResidence
{
    get
    {
        return Model.CountryResidence;
    }
    set
    {
        if (Model.CountryResidence == value)
            return;
        else
        {
            Model.CountryResidence = value;
            base.OnPropertyChanged("CountryResidence");
        }
    }
}

public Jurisdiction CountryBirth
{
    get
    {
        return Model.CountryBirth;
    }
    set
    {
        if (Model.CountryBirth == value)
            return;
        else
        {
            Model.CountryBirth = value;
            base.OnPropertyChanged("CountryBirth");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我也有CountryDomiciled,CountryPassport并且LegalJurisdiction都有相同的格式.同样,我有很多String属性,所有属性都共享其格式.

这导致了许多相同的代码!但是,我无法弄清楚如何使这更简洁.

有没有更好的方法来生成这些属性,使其保持强类型?

c# wpf mvvm

8
推荐指数
2
解决办法
3540
查看次数

对象在vb.net中隐式实例化?

我正在维护一个同时具有VB.NET和c#组件的应用程序.我认为这两种语言只在语法上有所不同,但我发现VB.NET中有一个奇怪的特性,它不存在于C#中.

在VB.NET中,我有以下类:

Public Class bill_staff Inherits System.Windows.Forms.Form
    ....
End Class
Run Code Online (Sandbox Code Playgroud)

如果我想在C#中使用这个类,我这样做:

using (var frm = new bill_staff())
    frm.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

但是,在VB.NET代码中,类可以像这样使用:

bill_staff.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

ShowDialog 在元数据中定义如下:

Public Function ShowDialog() As System.Windows.Forms.DialogResult
Run Code Online (Sandbox Code Playgroud)

所以在VB.NET中,可以在类上调用实例方法.据我所知,这似乎隐式地创建了一个类的新实例,然后在该对象上调用该方法.在C#中,这是不可能的 - 必须在类上调用静态方法,并且必须在对象上调用实例方法.

我在互联网上找不到任何关于此的信息.这个功能叫做什么,是不是很好的做法?

该项目最初是从VB6转换而来的 - 这是一些奇怪的遗留功能吗?

.net c# vb.net vb6

8
推荐指数
2
解决办法
725
查看次数

sql server 2008中的geography数据类型有多好?

我有一个充满客户的大型数据库,在sql server 2005中实现.每个客户都有一个纬度和经度,表示为Decimal(18,15).数据库中最重要的搜索查询会尝试查找靠近某个位置的所有客户,如下所示:

(Addresses.Latitude - @SearchInLat)  BETWEEN -1 * @LatitudeBound AND @LatitudeBound)
AND ( (Addresses.Longitude - @SearchInLng) BETWEEN -1 * @LongitudeBound AND @LongitudeBound)
Run Code Online (Sandbox Code Playgroud)

所以,这是一种非常简单的方法.@LatitudeBound并且@LongitudeBound只是数字,用于拉回该点的粗略边界矩形内的所有客户@SearchInLat, @SearchInLng.一旦结果到达客户端PC,就会过滤掉一些结果,以便有一个边界圆而不是一个矩形.(这是在客户端PC上完成的,以避免计算服务器上的平方根.)

这种方法过去运作良好.但是,我们现在想让搜索做更多有趣的事情 - 例如,拉回结果的数量更可预测,或者让用户动态增加搜索半径的大小.为此,我一直在研究使用Geography数据类型,空间索引和距离函数对sql server 2008进行ugprading的可能性.我的问题是:这些有多快?

我们目前的简单查询的优点是它非常快且不是性能密集型,这很重要,因为它经常被调用.查询基于这样的速度有多快:

SearchInPoint.STDistance(Addresses.GeographicPoint) < @DistanceBound
Run Code Online (Sandbox Code Playgroud)

相比之下?空间索引是否运作良好,并且STDistance快速?

sql-server-2008

7
推荐指数
1
解决办法
1070
查看次数

取消设置时,属性是否始终具有值?

我有这样的房产:

public Tuple<String, String>[] Breadcrumbs { get; set; }
Run Code Online (Sandbox Code Playgroud)

我在我的一个方法中测试过这样的测试:

if (Breadcrumbs != null && Breadcrumbs.Length > 0) { }
Run Code Online (Sandbox Code Playgroud)

根据调用此方法的时间,Breadcrumbs可能尚未设置.在一次测试中,Breadcrumbs == null评估为真.

未设置的属性是否总有价值?(会不会是null?)

.net c# properties

7
推荐指数
1
解决办法
2943
查看次数