我看过这个和这个,我有以下问题,看看我是否理解正确.鉴于代码
using System;
namespace returnObject
{
class myObject
{
public int number { get; set; }
}
class Program
{
static void Main(string[] args)
{
myObject mainObj = make();
mainObj.number = 7;
}
public static myObject make()
{
myObject localObj = new myObject();
localObj.number = 4;
return localObj;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望localObj在make方法结束时超出范围,因此,obj.number在main函数中设置为7会失败.它没有.我认为我说的是正确的:
localObj 是对象的引用localObj 在堆栈上创建 localObj 在make方法结束时超出范围. localObj引用的对象在堆上.所以,我正确地认为通常所localObj引用的对象在make方法结束时被垃圾收集器标记为删除但是由于引用值已被传递回mainObj,因此该对象被引用,因此不符合条件删除?
另外是以这种方式创建对象的好习惯吗?
r=ks.test(x=rnorm(100), "dnorm")
class(r)
[1] "htest"
## Doesnt work, "htest" is class in stats
setClass("Jergon", representation(fit="htest"))
[1] "Jergon"
Warning message:
undefined slot classes in definition of "Jergon": fit(class "htest")
## works "lm"
setClass("Jergon", representation(am="lm"))
[1] "Jergon"
Run Code Online (Sandbox Code Playgroud) 好吧,我有这个字符串Player.Character与这个它"Average Man{[Attributes (Mind 10) (Body 10) (Soul 10)]}".
我有这个do循环设置,以便它应该一次通过这个字符串1字符,看看它是否"["在添加每个字符时检查到另一个字符串ContainerName.事情是ContainerName只有这个"[",我希望它应该有"Average Man{".
如果有人可以帮助我理解为什么会发生这种情况,并且可能是我的成熟思想可以解决的解决方案,那么我将是最亲切的.
哦,这是我的代码.
int count = -1;
string ContainerName = "";
//Finds Start of container
do
{
count = count + 1;
ContainerName = ContainerName + Player.Character[count].ToString();
} while (Player.Character[count].ToString() != "[" &&
Player.Character.Length - 1 > count);
textBox1.Text = ContainerName;
Run Code Online (Sandbox Code Playgroud) 大家好.
昨天我注意到EnumerableLINQ exstensions隐藏在字符串上(我的意思是隐藏在intellisense中).
我们都知道string是一个IEnumerable<char>,所以它应该自动获得Enumerable扩展,并且如果你使用它们实际上编译和工作,但是为什么.NET开发人员决定将它们隐藏在intellisense中呢?
最后,我们如何隐藏特定类型的扩展方法?
对不起我的英语不好......
编辑:我忘了说我的目标是VS 2008上的.net 3.5
EDIT2:这里有2张图片:
字符串上的智能感知:
字符串上的Intellisense http://img690.imageshack.us/img690/10/stringintelli.png
关于IEnumerable的Intellisense:
关于可枚举的智能感知http://img101.imageshack.us/img101/8828/enumintelli.png
我经常面临的问题IEnumerable<T>是在通过foreach或LINQ查询迭代之前检查a是否为null,然后我经常会遇到这样的代码:
var myProjection = (myList ?? Enumerable.Empty<T>()).Select(x => x.Foo)...
Run Code Online (Sandbox Code Playgroud)
因此,我想将此扩展方法添加到Extensions类:
public static class MyExtensions
{
public static IEnumerable<T> AsEmptyIfNull<T>(this IEnumerable<T> source)
{
return source ?? Enumerable.Empty<T>();
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来这个代码时,我会立即想到一个小问题,即,考虑到扩展方法的"实例方法方面",它应该仅仅作为一个静态方法来实现,否则这样的东西将完全合法:
IEnumerable<int> list = null;
list.AsEmptyIfNull();
Run Code Online (Sandbox Code Playgroud)
你看到使用它有任何其他缺点吗?
如果大量使用,这种扩展会导致开发人员出现某种不良趋势吗?
奖金问题:
你能建议一个更好的名字吗? :)
(英语不是我的第一语言,那么我在命名方面不太好...)
提前致谢.
我在R的矩阵中的每个条目i,j是一个得分和rownames和colnames是IDS.
取而代之的是矩阵的我只是想有一个3列矩阵:i,j,score
现在我正在使用嵌套for循环.喜欢:
for(i in rownames(g))
{
print(which(rownames(g)==i))
for(j in colnames(g))
{
cur.vector<-c(cur.ref, i, j, g[rownames(g) %in% i,colnames(g) %in% j])
rbind(new.file,cur.vector)->new.file
}
}
Run Code Online (Sandbox Code Playgroud)
但是我觉得这样效率非常低......我确信有一个更好的方法我还不够R.思考?
我有以下字符串模式:1:2,2:3.
这就像一个字符串中的数组:
第一个元素是:1:2
第二个元素是:2:3
我想解析它并创建一个字典:
1,2 // 0 element in Dictionary
2,3 // 1 element in Dictionary
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
Dictionary<int,int> placesTypes = new Dictionary<int, int>();
foreach (var place in places.Split(','))
{
var keyValuePair = place.Split(':');
placesTypes.Add(int.Parse(keyValuePair[0]), int.Parse(keyValuePair[1]));
}
Run Code Online (Sandbox Code Playgroud)
有最好的方法吗?
谢谢.
我正在编写一个程序,它有一个运行另一个函数的函数:
int executePuzzle(int input) {
switch (input) {
case 1: puzzle1();break;
case 2: puzzle2();break;
default:break;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,简单地使用以下内容可能更有效:
int puzzle[2] = {puzzle1(),puzzle2()};
Run Code Online (Sandbox Code Playgroud)
然后调用puzzle0; 我想知道如何做到这一点.
这可能是一个非常简单的LINQ问题.我正在使用LINQ to SQL并提取数据集.
我目前的代码是这样的:
var tempTable = (from p in dc.Live_Diffs
where p.RowNum = 50
select new CustomResult
{
RowNum = p.RowNum,
ED1 = p.ED1,
ED2 = p.ED2,
ED3 = p.ED3,
ED4 = p.ED4,
ED5 = p.ED5,
ED6 = p.ED6,
ED7 = p.ED7,
ED8 = p.ED8
}).ToList();
Run Code Online (Sandbox Code Playgroud)
我如何指定如下所示的条件:"where p.RowNum is in the set: {50,60,70}".
我有一个列表或双打,我希望避免使用大量的"OR"条件......
非常感谢 - kcross
我希望你能帮我一臂之力.这已经困扰了我很久了.我在网上找不到确凿的答案.我有一个简单的类层次结构:BaseClass,ClassA,ClassB和DefaultClass派生自它.它们都有类似ClassA(输入输入)的构造函数:base(输入)......都非常简单.现在我有以下工厂
namespace mynamespace
{
public class Factory
{
public static Dictionary<string, Type> Map =
new Dictionary<string, Type>
{
{"ClassA", typeof(ClassA)},
{"ClassB", typeof(ClassB)}
};
public static BaseClass Create(Input input)
{
Type constructor;
try
{
constructor = Map[input.ClassType];
}
catch (KeyNotFoundException)
{
constructor = typeof(DefaultClass);
}
return (BaseClass) Activator.CreateInstance(constructor, input);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,输入对象的.ClassType成员确定实例化了哪个类.这种类型的构造一直在为一个简单的调用工作
var myClass = Factory.Create(input);
Run Code Online (Sandbox Code Playgroud)
在我的独立应用程序中.现在我必须让应用程序在服务器上运行,并且对Create方法的调用从客户端接收序列化的输入对象.我会说这是有效的应用程序和没有的应用程序之间的唯一区别.现在,输入就是这样的
[DataContract]
public class Input
{
[DataMember] public string ClassType;
[DataMember] public string member1;
}
Run Code Online (Sandbox Code Playgroud)
在它没有这样的DataContract或DataMember注释之前.好了,现在代码在Activator.CreateInstance行崩溃了,但是"给定的密钥不存在于字典中".你有什么想法可以解决这个问题吗?唯一的区别是构造函数中的序列化对象.
非常感谢提前和问候.