小编dig*_*All的帖子

C# - 对象范围

我看过这个这个,我有以下问题,看看我是否理解正确.鉴于代码

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,因此该对象被引用,因此不符合条件删除?

另外是以这种方式创建对象的好习惯吗?

c#

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

为什么有时我不能将类定义设置为s4类中的槽?

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)

r class s4

6
推荐指数
1
解决办法
1260
查看次数

C#Do-Loop不向字符串添加字符

好吧,我有这个字符串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)

c#

6
推荐指数
1
解决办法
243
查看次数

可枚举的LINQ扩展隐藏在字符串上......为什么以及如何?

可能重复:
为什么VS 2008不在Intellisense中为String类显示扩展方法

大家好.

昨天我注意到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

linq string extension-methods .net-3.5 visual-studio-2008

5
推荐指数
1
解决办法
282
查看次数

IEnumerable <T> null合并扩展

我经常面临的问题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)

你看到使用它有任何其他缺点吗?
如果大量使用,这种扩展会导致开发人员出现某种不良趋势吗?


奖金问题:

你能建议一个更好的名字吗? :)
(英语不是我的第一语言,那么我在命名方面不太好...)

提前致谢.

c# ienumerable extension-methods null-coalescing

5
推荐指数
1
解决办法
1473
查看次数

R:将矩阵重排为三列

我在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.思考?

r

5
推荐指数
2
解决办法
4829
查看次数

解析字符串并创建字典

我有以下字符串模式: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)

有最好的方法吗?

谢谢.

c#

5
推荐指数
2
解决办法
5043
查看次数

通过C中的数组调用函数?

我正在编写一个程序,它有一个运行另一个函数的函数:

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; 我想知道如何做到这一点.

c arrays function

4
推荐指数
1
解决办法
135
查看次数

LINQ:如何测试值是否包含在set中

这可能是一个非常简单的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

c# linq

4
推荐指数
1
解决办法
2574
查看次数

Activator.CreateInstance上的字典中没有给定的密钥

我希望你能帮我一臂之力.这已经困扰了我很久了.我在网上找不到确凿的答案.我有一个简单的类层次结构: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行崩溃了,但是"给定的密钥不存在于字典中".你有什么想法可以解决这个问题吗?唯一的区别是构造函数中的序列化对象.

非常感谢提前和问候.

c#

4
推荐指数
1
解决办法
8965
查看次数