我刚才注意到了一些我以前从未意识到的东西.事实证明这个类在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)
因此,同一类的不同实例可以访问彼此的私有成员.
直到现在,我认为对象的私有成员只能被该对象访问,而不能被同一类的其他实例访问.发现这一点有点令人惊讶.
所有常见的面向对象语言都是这种情况吗?这对我来说并不直观.
我有以下代码:
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循环不像更高级语言那样灵活吗?
我经常写这样的代码:
if ( list.Count > 0 ) { }
Run Code Online (Sandbox Code Playgroud)
这有效吗?此操作是否如下所示:
或者像这样:
也就是说,要获得列表中的元素数量,您是否必须在列表中一直计算,或者是在某处记录的元素数量?这是所有ICollection课程的情况吗?
怎么样的Capacity名单呢?
我认为这是一个相当基本的问题,但我似乎无法找到解决方案.
我有一个类似于以下的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计数列.有人能指出我正确的方向吗?
我正在尝试为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) 我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) 阅读本文后,我的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属性,所有属性都共享其格式.
这导致了许多相同的代码!但是,我无法弄清楚如何使这更简洁.
有没有更好的方法来生成这些属性,使其保持强类型?
我正在维护一个同时具有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转换而来的 - 这是一些奇怪的遗留功能吗?
我有一个充满客户的大型数据库,在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快速?
我有这样的房产:
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?)
c# ×7
.net ×2
mvvm ×2
wpf ×2
asp.net ×1
http-headers ×1
mvvm-light ×1
oop ×1
pandas ×1
properties ×1
python ×1
vb.net ×1
vb6 ×1