在规划我的程序时,我经常从一连串的想法开始:
足球队只是一个足球运动员名单.因此,我应该代表它:
Run Code Online (Sandbox Code Playgroud)var football_team = new List<FootballPlayer>();
此列表的顺序表示球员在名单中列出的顺序.
但我后来才意识到,除了仅仅是球员名单之外,球队还有其他属性,必须记录下来.例如,本赛季的总得分,当前预算,统一颜色,string
代表球队名称等等.
那么我认为:
好吧,足球队就像一个球员名单,但另外,它有一个名称(a
string
)和一个总分(aint
)..NET不提供用于存储足球队的类,所以我将创建自己的类.最相似和相关的现有结构是List<FootballPlayer>
,所以我将继承它:Run Code Online (Sandbox Code Playgroud)class FootballTeam : List<FootballPlayer> { public string TeamName; public int RunningTotal }
但事实证明,指南说你不应该继承List<T>
.我在两个方面完全被这个指南搞糊涂了.
显然List
是以某种方式针对性能进行了优化.怎么会这样?如果我延长会给我带来什么性能问题List
?究竟会打破什么?
我看到的另一个原因List
是微软提供的,我无法控制它,所以我在以后暴露"公共API"后无法改变它.但我很难理解这一点.什么是公共API,我为什么要关心?如果我当前的项目没有并且不太可能拥有此公共API,我可以放心地忽略此指南吗?如果我继承List
并且事实证明我需要一个公共API,那么我将遇到什么困难?
为什么它甚至重要?列表是一个列表.什么可能改变?我可能想要改变什么?
最后,如果微软不想让我继承List
,他们为什么不上课sealed
呢?
显然,对于自定义集合,Microsoft提供了一个Collection
应该扩展的类而不是List
.但这个类是非常裸露,并没有多少有用的东西,比如AddRange
,例如.jvitor83的答案提供了该特定方法的性能原理,但是如何缓慢AddRange
而不是没有AddRange
?
继承Collection
是比继承更多的工作List
,我认为没有任何好处.当然微软不会告诉我无缘无故地做额外的工作,所以我不禁觉得我在某种程度上误解了某些东西,而继承Collection
实际上并不是解决我问题的正确方法.
我见过如实施的建议IList …
我想跟踪我的代码的性能,所以我使用了存储开始和结束时间System.DateTime.Now
.我将两者之间的差异作为执行代码的时间.
我注意到差异似乎并不准确.所以我尝试使用一个Stopwatch
对象.事实证明,这更加准确.
谁能告诉我为什么Stopwatch
比计算开始和结束时间之间的差异更准确System.DateTime.Now
?
顺便说一句,我不是说百分之十.我得到了大约15-20%的差异.
我对Rstudio有一个奇怪的问题:如果脚本调用ggplot2函数来显示一个图,那么使用Source来运行脚本不会产生图.如果我选择与整个脚本Ctrl+A
,然后运行当前行或选择(Ctrl+Enter
),然后剧情确实显示.同样,在控制台中键入绘图命令会产生正确的输出.
例如:
library(ggplot2)
p = ggplot(mtcars, aes(wt, mpg))
p + geom_point()
Run Code Online (Sandbox Code Playgroud)
只有在粘贴到控制台时才会产生输出,而不是如果来源.
还有其他问题,但两者都没有帮助:
dev.off()
变通方法不起作用(" Error in dev.off() : cannot shut down device 1 (the null device)
")如何在获取脚本时让Rstudio显示绘图?我使用的是Rstudio 0.98.1062和R 3.1.1.
我在Windows 7上使用R.显然R在某种程度上发现了我说英语之外的语言的证据,并固执地坚持用我自己的语言在控制台中输出.由于各种原因,这是不可取的,我希望R是英语.
我能够LANGUAGE=en
用作R控制台桌面快捷方式的命令行选项,但Rstudio中的语言仍然是错误的,它直接启动R可执行文件,因此忽略了快捷方式中的命令行参数.
我曾尝试创建一个.Renviron
下的文件C:\Users\[MY_NAME]\Documents
,这是由工作目录返回的路径getwd()
,用LANGUAGE=en
它.R忽略了这一点.我R_ENVIRON
和R_ENVIRON_USER
变量显示为""
所以.Renviron
应该是正确的文件名.
我也试过创建.Renviron
under R_HOME\etc
(R_HOME
指向C:/PROGRA~1/R/R-215~1.0
)而R也忽略它.
我是有所增加成功Sys.setenv(LANGUAGE="en")
的R_HOME\etc
-这使得从R控制台英语的所有输出,除了初始的版权信息.
如何将R默认为英语,以便将其传播到RStudio?
在C#中,匿名类型可以如下:
method doStuff(){
var myVar = new {
a = false,
b = true
}
if (myVar.a)
{
// Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
但是,以下内容将无法编译:
method doStuff(){
var myVar = new {
a = false,
b = true
}
if (myVar.a)
{
myVar.b = true;
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为myVar的字段是只读的,无法分配.似乎想做一些像后者相当普遍的事情; 也许我见过的最好的解决方案就是在方法之外定义一个结构.
但是,真的没有办法让上面的块工作吗?困扰我的原因是,myVar是这个字段的局部变量,所以它似乎只应该在使用它的方法中引用.此外,需要将struct放在方法之外可以使对象的声明远离其使用,特别是在长方法中.
换句话说,有没有匿名类型的替代方法,这将允许我定义这样的"结构"(我意识到结构存在于C#中,必须在方法之外定义)而不使其只读?如果不是,想要这样做是否存在根本性的错误,我应该采用不同的方法吗?
我注意到如果我在图像后面开始一个新段落,大多数渲染器会在图像和下面的文本之间留下不足的空间.该段最终看起来像一个传奇.虽然当我想要一个图例时这很有用,但有时我只想在两段之间插入一个图像,并且如上所述在下面充分间隔.
我目前纠正了这个问题:
Lorem ipsum dolor sit amet, consectetur adipiscing elit:
[IMAGE]
<br/><br/>
Pellentesque pharetra turpis vitae velit consequat placerat. Duis sed volutpat neque, et scelerisque orci.
Run Code Online (Sandbox Code Playgroud)
但这让我感到不雅观:如果可能,我想避免使用HTML.
还有另一种强制换行的方法吗?
我正在使用Markdown Preview Plus for Atom进行渲染.
我有一个测试类,基本上应该像下面这样:
[TestClass]
public class MyTest
{
private MyClass o1;
private MyClass o2;
[TestInitialize]
private void PrepareObjects()
{
o1 = new MyClass();
o2 = new MyClass();
}
[TestMethod]
public void TestEquality()
{
Assert.IsTrue(o1.Equals(o2));
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行测试时,我得到了一个NullReferenceException
.如果我把里面的断点PrepareObjects
和TestEquality
然后我可以看到TestInitialize
尚未被援引的时间TestEquality
是.
PrepareObjects
从私有更改为公共修复此问题.为什么?
我想检查变量是否在运行时以编程方式初始化.为了使这个不太神秘的原因,请看以下不完整的代码:
string s;
if (someCondition) s = someValue;
if (someOtherCondition) s = someOtherValue;
bool sIsUninitialized = /* assign value correctly */;
if (!sIsUninitialized) Console.WriteLine(s) else throw new Exception("Please initialize s.");
Run Code Online (Sandbox Code Playgroud)
并完成相关位.
一个hacky解决方案是使用默认值初始化s:
string s = "zanzibar";
Run Code Online (Sandbox Code Playgroud)
然后检查它是否发生了变化:
bool sIsUninitialized = s == "zanzibar";
Run Code Online (Sandbox Code Playgroud)
但是,如果someValue
或someOtherValue
恰好是"桑给巴尔"呢?然后我有一个bug.有更好的方法吗?
我正在尝试以编程方式使用该PRIVMSG
命令发送IRC消息.IRC用于CRLF
分隔单独的命令,因此"enter"是每个命令的结尾.
我想发送带有换行符的单个消息,以便收件人(人类IRC用户)看到有休息的响应.这可能吗?我可以使用其他一些换行符吗?我应该在换行符时拆分消息并将其作为多条消息发送吗?
我有一个包含的测试文件
1,2,3
2,3,4
5,6,7
Run Code Online (Sandbox Code Playgroud)
我想将其插入第一行: A,B,C
所以我得到:
A,B,C
1,2,3
2,3,4
5,6,7
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
c# ×6
line-breaks ×2
r ×2
rstudio ×2
.net ×1
datetime ×1
ggplot2 ×1
inheritance ×1
irc ×1
list ×1
localization ×1
markdown ×1
mstest ×1
oop ×1
performance ×1
settings ×1
stopwatch ×1
struct ×1
timing ×1
windows ×1