小编Fra*_*yce的帖子

为什么类"Program"声明为静态?

创建WinForm应用程序时,您将ProgramProgram.cs文件中获得自动生成的类模板.

看起来像这样:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么这个Program类被声明为static
如果我删除static声明它仍然可以正常工作.

问题的原因是我认为Program从基类继承可能会很好,它将实现Application.ThreadExceptionAppDomain.CurrentDomain.UnhandledException的处理,而不是对我的所有项目实现或多或少相同.

c# static winforms

16
推荐指数
3
解决办法
1万
查看次数

命名参数的规则是什么?为什么?

考虑这样的方法

void RegisterUser(string firstname, string lastname, int age);
Run Code Online (Sandbox Code Playgroud)

当我调用它时,我喜欢显式地命名这样的方法的参数,因为很容易让某些人混淆firstnamelastname参数.但是,它并不是必需的age.例如,我认为从清晰的角度来看这应该是可以的.

RegisterUser(firstname: "John", lastname: "Smith", 25);
Run Code Online (Sandbox Code Playgroud)

但是会抛出以下错误:

在指定了所有固定参数后,必须出现命名参数规范

另一个有趣的事情是,如果签名是

void RegisterUser(int age, string firstname, string lastname);
Run Code Online (Sandbox Code Playgroud)

然后按如下方式调用它不会抛出错误

RegisterUser(25, firstname: "John", lastname: "Smith");
Run Code Online (Sandbox Code Playgroud)

为什么C#这样设计?如果允许第一个场景,是否存在编译器的复杂性?

c# syntax language-design

16
推荐指数
3
解决办法
2283
查看次数

将可滚动按钮添加到scrollview

我想在滚动视图中滚动五个按钮.当用户停止拖动按钮时,它应该移动到下一个按钮.我在这做错了什么?

class ViewController: UIViewController {

    @IBOutlet weak var categoryScrollView: UIScrollView!
    var categoryArr = ["Jack","Mark","Down","Bill","Steve"]

    override func viewDidLoad() {
        super.viewDidLoad()
        let scrollingView = colorButtonsView(CGSizeMake(150,categoryScrollView.frame.size.height), buttonCount: 5)
        categoryScrollView.contentSize = scrollingView.frame.size
        categoryScrollView.addSubview(scrollingView)
        categoryScrollView.showsVerticalScrollIndicator = false
        categoryScrollView.delegate = self
        categoryScrollView.pagingEnabled = true
        categoryScrollView.indicatorStyle = .Default
    }


func colorButtonsView(buttonSize:CGSize, buttonCount:Int) -> UIView {
        let buttonView = UIView()
        buttonView.frame.origin = CGPointMake(0,0)
        let padding = CGSizeMake(10, 10)
        buttonView.frame.size.width = (buttonSize.width + padding.width) * CGFloat(buttonCount)
        var buttonPosition = CGPointMake(padding.width * 0.5, padding.height)
        let buttonIncrement = buttonSize.width + padding.width …
Run Code Online (Sandbox Code Playgroud)

scrollview ios swift

13
推荐指数
2
解决办法
2211
查看次数

如何在C#中的yield return方法中正确抛出Exception

请参阅下面的编辑,以重现我在此问题中描述的行为.

以下程序永远不会结束,因为yield returnC#中的构造在GetStrings()抛出异常时无限期地调用该方法.

class Program
{
    static void Main(string[] args)
    {
        // I expect the Exception to be thrown here, but it's not
        foreach (var str in GetStrings())
        {
            Console.WriteLine(str);
        }
    }

    private static IEnumerable<string> GetStrings()
    {
        // REPEATEDLY throws this exception
        throw new Exception();
        yield break;
    }
}
Run Code Online (Sandbox Code Playgroud)

对于这个简单的例子,我显然可以使用return Enumerable.Empty<string>();,而问题就消失了.但是在一个更有趣的例子中,我希望抛出异常一次,然后调用方法停止并在"消耗"的方法中抛出异常IEnumerable.

有没有办法产生这种行为?

编辑:好的,问题与我的想法不同.上面的程序没有结束,foreach循环表现得像一个无限循环.以下程序将结束,并在控制台上显示异常.

class Program
{
    static void Main(string[] args)
    {
        try
        {
            foreach (var str in GetStrings())
            {
                Console.WriteLine(str); …
Run Code Online (Sandbox Code Playgroud)

c# exception yield-return

8
推荐指数
1
解决办法
2721
查看次数

如何定义"类型"的含义

摘自Eric Lippert关于"是"的含义的博客:

类型的一个常见概念是类型是值的集合,并且赋值兼容性仅仅是检查给定值是否是必要集合的成员.但在C#中并非如此.

他给出的反例是null is string返回false,但string b = nullC#编译器完全没问题.

也许这是一个愚蠢的问题,但是在C#.Net上下文中定义"类型"概念的更好方法是什么?它只是用来定义内存占用规则的一个词吗?......到CLR?我意识到这个定义有多松散(而且可怕的错误),但是我正在努力适应一个漂亮的包装并绕过类型的想法.

注意:越简单,但完全准确,越好.(强N型,这里).

.net c# clr types

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

解决魔方的傻瓜立方体

杜姆先生:您好,我很愚蠢,但我仍然想解决一个3x3x3的Rubik立方体。

斯玛特先生:好的,您很幸运。 就是这样做的指导!

杜姆先生:不,因为我是杜姆,这对我不起作用。我只能遵循这样的算法。

pick up cube

look up a list of moves from some smart person

while(cube is not solved)
    perform the next move from list and turn
    the cube as instructed.  If there are no
    more turns in the list, I'll start from the
    beginning again.

hey look, it's solved!
Run Code Online (Sandbox Code Playgroud)

斯玛特先生:好的,这是您的清单!


好的,什么样的列表可以解决这样的问题?我知道,魔方永远不能远离20点移动到解决,并且有一个魔方的43,252,003,274,489,856,000排列。因此,我认为该列表的长度可能为(20 * 43,252,003,274,489,856,000),但是

  • 有谁知道目前已知的最短列表?
  • 您将如何找到理论上最短的清单?

请注意,这纯粹是一个理论问题,我实际上并不希望对计算机进行编程来做到这一点。

algorithm rubiks-cube

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

HttpClient-向Get请求添加参数

我有一个RestRequest,我试图转换为HttpClient获取请求.有什么方法可以按照下面的方式发送参数吗?

private readonly IRestClient _restClient;
public Type GetInfo(string name)
{
    var request = new RestRequest(url, Method.GET);
    request.AddParameter("name", "ivar");
    var response = _restClient.ExecuteRequest(request);
    return ExecuteRequest<Type>(request);
}
Run Code Online (Sandbox Code Playgroud)

c# restsharp

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

TryRemove来自C#中ConcurrentDictionary的键值对

我的场景是我想要一个ConcurrentDictionary像这样的方法.

bool TryRemove(TKey key, TValue value) {
    // remove the value IF the value passed in == dictionary[key]
    // return false if the key is not in the dictionary, or the value is not equal
}
Run Code Online (Sandbox Code Playgroud)

有没有办法同时做到这一点?我很难找到这个场景的答案,尽管看起来这是一个常见的用例.

我可以做这样的事情,但如果我已经使用了,我想避免锁定ConcurrentDictionary.我还必须锁定GetOrAdd()AddOrUpdate()在其他地方打电话.似乎应该有一个更好的方法ConcurrentDictionary.

ConcurrentDictionary<int, string> dict = ...;

/// stuff

int keyTryToRemove = 1337;
string valTryToRemove = "someValue";

bool success = false;
lock(keyTryToRemove) {
    string val;
    if (dict.TryRemove(keyTryToRemove, out val)) {
        if (val == valTryToRemove) …
Run Code Online (Sandbox Code Playgroud)

c# concurrency concurrentdictionary

3
推荐指数
1
解决办法
1006
查看次数

动态Web项目和企业应用程序项目之间的区别

Eclipse IDE中的动态Web项目和企业应用程序项目有什么区别?

如果我想使用普通的JSP(带有Java类)和Java Server Faces(带有Java类),我可以在eclipse中直接创建动态Web项目吗?

java eclipse

2
推荐指数
1
解决办法
3524
查看次数

如果字符串包含回车键或\n,则拆分该字符串

我有一个多行文本框.我使用回车键逐一输入配方成分.我将其保存到单个字段中的数据库,但在显示时我需要拆分它们以逐行显示它们.我怎样才能做到这一点?

c#

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

在Python 3.x中聚合没有嵌套循环的嵌套列表

我准备进入python的3.5 lambda表示法,我想知道嵌套循环可以简单地用lambda one-liner代替.例如:我有这个简单的虚拟类层次结构:

class Resource:
    def __init__(self, name="foo"):
        self.name = name

class Course:
    def __init__(self):
        self.resources = list()

class College:
    def __init__(self):
        self.courses = list()
Run Code Online (Sandbox Code Playgroud)

我有一个实例CollegeCoursesResources我的出发点.

college = College()
Run Code Online (Sandbox Code Playgroud)

现在,如果我想要我list的所有内容Resources,我College可以轻松地用2做for-loops:

all_resources = list()
for course in  college.courses:
    for resource in course.resources:
        all_resources.append(resource)
Run Code Online (Sandbox Code Playgroud)

这确实很简单,但我想知道我是否也可以通过这样做来实现这一点:

all_resources = list(map(lambda r: r, [c.resources for c in college.courses]))
Run Code Online (Sandbox Code Playgroud)

但不幸的是这给了我一个listlists,而不是listResources,我想实现.lambda适合这样的东西吗?对于像这样的手术来说,最蟒蛇的方式是什么?

python lambda python-3.x

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