匿名方法或者lambda表达式怎么立即执行?

twtyypmb123 2016-05-30 11:43:17
RT,就相当于js中的,
(function(){return;})()
...全文
401 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
twtyypmb123 2016-06-06
  • 打赏
  • 举报
回复
引用 17 楼 sp1234 的回复:
属性 ABC 就是“属性ABC”,成文自明。 不管你最初是是用什么 javascript 里边随便一个语法现象扩大化来说到这里的,但是如果你使用 c# 语言那么就遵循其优雅的语法,这里不走 javascript 那种诡异路子。
看上去是要正统一点,不过多命名一个成员会死的强迫症怎么办。。。
showjim 2016-05-30
  • 打赏
  • 举报
回复
((Action)(() => { }))();
但是意义呢
Poopaye 2016-05-30
  • 打赏
  • 举报
回复
js之所以要这样写是因为一个网页里到处都是js,如果不用function来限制作用域,很容易导致变量冲突 如果是写c#。。。把你要执行的代码放在一对大括号中间就行了,为什么还要用额外的方法括起来?
twtyypmb123 2016-05-30
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
Action act=()=>{}; act();
无法inline?
  • 打赏
  • 举报
回复
Action act=()=>{}; act();
  • 打赏
  • 举报
回复
你要定义成action或者action,或者其它你自己定义的delegate,然后才能执行func()
  • 打赏
  • 举报
回复
属性 ABC 就是“属性ABC”,成文自明。 不管你最初是是用什么 javascript 里边随便一个语法现象扩大化来说到这里的,但是如果你使用 c# 语言那么就遵循其优雅的语法,这里不走 javascript 那种诡异路子。
  • 打赏
  • 举报
回复
引用 12 楼 x3230835 的回复:
[quote=引用 11 楼 x3230835 的回复:] [quote=引用 10 楼 sp1234 的回复:] [quote=引用 6 楼 x3230835 的回复:] [quote=引用 4 楼 shingoscar 的回复:] js之所以要这样写是因为一个网页里到处都是js,如果不用function来限制作用域,很容易导致变量冲突 如果是写c#。。。把你要执行的代码放在一对大括号中间就行了,为什么还要用额外的方法括起来?
对于类成员的初始化很方便,特别是有try的[/quote] javascript 中声明一个函数就是声明一个类型,“一心二用”,而类型也用来进行“模块化”(正如#4楼所说)。所以声明一个函数之后往往执行它。 在.net/c#,这相当于代码
public class ABC
{
    private static int abc = 123;

    .......
}
只要你声明一个类型(而不是函数),那么在第一次使用到这个类型时就会初始化 ABC.abc 的值。这里就扯不上上么“Lamda、立即执行”的诡异的弯弯绕的概念了。 所以c# 这种 OOPL 语言很“正统”,而javascript相当“邪”。[/quote] 其实是想这么干

class QWE
{
public static int ABC = ( (Func<int>)( () =>
        {
            try
            {
                return int.Parse( System.Configuration.ConfigurationManager.AppSettings["ABC"] );

            }
            catch( Exception )
            {
                return 123;
            }
        } ) )();
}
[/quote]初始值语句有可能会抛异常,所以就想这么干,不过也可以放到构造函数里面[/quote] 在 c#/.net 中会正规地使用“属性”的语法来写逻辑。例如
    class QWE
    {

        private static int? _ABC;

        public static int ABC
        {
            get
            {
                if (!_ABC.HasValue)
                {
                    try
                    {
                        _ABC = int.Parse(System.Configuration.ConfigurationManager.AppSettings["ABC"]);
                    }
                    catch (Exception)
                    {
                        _ABC = 123;
                    }
                };
                return _ABC.Value;
            }
        }

        ......
    }
我还是在此提醒你,c#要正统得多。不要满脑子只有 javascript 那点语法。
xuzuning 2016-05-30
  • 打赏
  • 举报
回复
比如
            int c = 0;
var b = ((Func<int>)(() => { c = 123; return 456; }))();
Console.WriteLine("c:{0} b:{1}", c, b);
xuzuning 2016-05-30
  • 打赏
  • 举报
回复
没问题,你写的并没有错! 你遇到了什么问题?
引用 12 楼 x3230835 的回复:
[quote=引用 11 楼 x3230835 的回复:] [quote=引用 10 楼 sp1234 的回复:] [quote=引用 6 楼 x3230835 的回复:] [quote=引用 4 楼 shingoscar 的回复:] js之所以要这样写是因为一个网页里到处都是js,如果不用function来限制作用域,很容易导致变量冲突 如果是写c#。。。把你要执行的代码放在一对大括号中间就行了,为什么还要用额外的方法括起来?
对于类成员的初始化很方便,特别是有try的[/quote] javascript 中声明一个函数就是声明一个类型,“一心二用”,而类型也用来进行“模块化”(正如#4楼所说)。所以声明一个函数之后往往执行它。 在.net/c#,这相当于代码
public class ABC
{
    private static int abc = 123;

    .......
}
只要你声明一个类型(而不是函数),那么在第一次使用到这个类型时就会初始化 ABC.abc 的值。这里就扯不上上么“Lamda、立即执行”的诡异的弯弯绕的概念了。 所以c# 这种 OOPL 语言很“正统”,而javascript相当“邪”。[/quote] 其实是想这么干

class QWE
{
public static int ABC = ( (Func<int>)( () =>
        {
            try
            {
                return int.Parse( System.Configuration.ConfigurationManager.AppSettings["ABC"] );

            }
            catch( Exception )
            {
                return 123;
            }
        } ) )();
}
[/quote]初始值语句有可能会抛异常,所以就想这么干,不过也可以放到构造函数里面[/quote]
Poopaye 2016-05-30
  • 打赏
  • 举报
回复
为什么不写到构造函数里?2个以上的字段还能省行数
twtyypmb123 2016-05-30
  • 打赏
  • 举报
回复
引用 11 楼 x3230835 的回复:
[quote=引用 10 楼 sp1234 的回复:] [quote=引用 6 楼 x3230835 的回复:] [quote=引用 4 楼 shingoscar 的回复:] js之所以要这样写是因为一个网页里到处都是js,如果不用function来限制作用域,很容易导致变量冲突 如果是写c#。。。把你要执行的代码放在一对大括号中间就行了,为什么还要用额外的方法括起来?
对于类成员的初始化很方便,特别是有try的[/quote] javascript 中声明一个函数就是声明一个类型,“一心二用”,而类型也用来进行“模块化”(正如#4楼所说)。所以声明一个函数之后往往执行它。 在.net/c#,这相当于代码
public class ABC
{
    private static int abc = 123;

    .......
}
只要你声明一个类型(而不是函数),那么在第一次使用到这个类型时就会初始化 ABC.abc 的值。这里就扯不上上么“Lamda、立即执行”的诡异的弯弯绕的概念了。 所以c# 这种 OOPL 语言很“正统”,而javascript相当“邪”。[/quote] 其实是想这么干

class QWE
{
public static int ABC = ( (Func<int>)( () =>
        {
            try
            {
                return int.Parse( System.Configuration.ConfigurationManager.AppSettings["ABC"] );

            }
            catch( Exception )
            {
                return 123;
            }
        } ) )();
}
[/quote]初始值语句有可能会抛异常,所以就想这么干,不过也可以放到构造函数里面
twtyypmb123 2016-05-30
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
[quote=引用 6 楼 x3230835 的回复:] [quote=引用 4 楼 shingoscar 的回复:] js之所以要这样写是因为一个网页里到处都是js,如果不用function来限制作用域,很容易导致变量冲突 如果是写c#。。。把你要执行的代码放在一对大括号中间就行了,为什么还要用额外的方法括起来?
对于类成员的初始化很方便,特别是有try的[/quote] javascript 中声明一个函数就是声明一个类型,“一心二用”,而类型也用来进行“模块化”(正如#4楼所说)。所以声明一个函数之后往往执行它。 在.net/c#,这相当于代码
public class ABC
{
    private static int abc = 123;

    .......
}
只要你声明一个类型(而不是函数),那么在第一次使用到这个类型时就会初始化 ABC.abc 的值。这里就扯不上上么“Lamda、立即执行”的诡异的弯弯绕的概念了。 所以c# 这种 OOPL 语言很“正统”,而javascript相当“邪”。[/quote] 其实是想这么干

class QWE
{
public static int ABC = ( (Func<int>)( () =>
        {
            try
            {
                return int.Parse( System.Configuration.ConfigurationManager.AppSettings["ABC"] );

            }
            catch( Exception )
            {
                return 123;
            }
        } ) )();
}
  • 打赏
  • 举报
回复
引用 6 楼 x3230835 的回复:
[quote=引用 4 楼 shingoscar 的回复:] js之所以要这样写是因为一个网页里到处都是js,如果不用function来限制作用域,很容易导致变量冲突 如果是写c#。。。把你要执行的代码放在一对大括号中间就行了,为什么还要用额外的方法括起来?
对于类成员的初始化很方便,特别是有try的[/quote] javascript 中声明一个函数就是声明一个类型,“一心二用”,而类型也用来进行“模块化”(正如#4楼所说)。所以声明一个函数之后往往执行它。 在.net/c#,这相当于代码
public class ABC
{
    private static int abc = 123;

    .......
}
只要你声明一个类型(而不是函数),那么在第一次使用到这个类型时就会初始化 ABC.abc 的值。这里就扯不上上么“Lamda、立即执行”的诡异的弯弯绕的概念了。 所以c# 这种 OOPL 语言很“正统”,而javascript相当“邪”。
  • 打赏
  • 举报
回复
引用 3 楼 x3230835 的回复:
[quote=引用 2 楼 starfd 的回复:] Action act=()=>{}; act();
无法inline?[/quote] 你把它写在一行上不就满足了嘛。 纠缠这个“是否一行”语法格式,没什么意思。
Poopaye 2016-05-30
  • 打赏
  • 举报
回复
引用 6 楼 x3230835 的回复:
[quote=引用 4 楼 shingoscar 的回复:] js之所以要这样写是因为一个网页里到处都是js,如果不用function来限制作用域,很容易导致变量冲突 如果是写c#。。。把你要执行的代码放在一对大括号中间就行了,为什么还要用额外的方法括起来?
对于类成员的初始化很方便,特别是有try的[/quote] 看不懂,类成员初始化和lambda有啥关系?
songbing774933 2016-05-30
  • 打赏
  • 举报
回复
引用 6 楼 x3230835 的回复:
[quote=引用 4 楼 shingoscar 的回复:]
js之所以要这样写是因为一个网页里到处都是js,如果不用function来限制作用域,很容易导致变量冲突
如果是写c#。。。把你要执行的代码放在一对大括号中间就行了,为什么还要用额外的方法括起来?
对于类成员的初始化很方便,特别是有try的[/quote]

Point pt = new Point( ) { X = 20 , Y = 30 };
twtyypmb123 2016-05-30
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
js之所以要这样写是因为一个网页里到处都是js,如果不用function来限制作用域,很容易导致变量冲突 如果是写c#。。。把你要执行的代码放在一对大括号中间就行了,为什么还要用额外的方法括起来?
对于类成员的初始化很方便,特别是有try的

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧