为什么我不能以这种方式有条件地添加到列表中?

时间:2011-04-26 18:54:28

标签: c# operators

我很确定Java会让你这么做,但我可能会错。

List<string> myList = new List<string>();
bool istrue = false;
myList.Add(istrue ? "something" : void);

9 个答案:

答案 0 :(得分:9)

你不能那样使用void。它不是表达式,它是方法sigs中使用的关键字。并且?:运算符要求所有操作数都是表达式。我甚至确信你不能用Java做到这一点。

为什么不发表if声明?它使你想要做的事情变得更加清晰,正是因为void在这种背景下毫无意义。

  1. 仅在istrue添加内容,否则不执行任何操作:

    List<string> myList = new List<string>();
    bool istrue = false;
    
    if (istrue)
    {
        myList.Add("something");
    }
    

    在一行中:

    if (istrue) myList.Add("something");
    
  2. 如果istrue添加内容,则添加空值,否则:

    List<string> myList = new List<string>();
    bool istrue = false;
    
    if (istrue)
    {
        myList.Add("something");
    }
    else
    { 
        myList.Add(null);
    }
    

    在一行中(null?:运算符配合使用):

    myList.Add(istrue ? "something" : null);
    

答案 1 :(得分:2)

void仅作为方法的返回类型合法(1),或者(2)作为指针类型的基础类型。 (感谢@Eric Lippert)。

此代码甚至不会编译。

答案 2 :(得分:1)

这个怎么样

public static void AddIf<T>(this List<T> list, bool flag, T obj)
{
    if (flag) { list.Add(obj); }
}

只需传入标志和项目

myList.AddIf(true, item);
myList.AddIf(item!=item2, item2);

答案 3 :(得分:0)

我很高兴这不起作用。如果我调用.Add我希望添加一些内容。如果这种逻辑在你看不到的方法中怎么办?

myList.Add( aBlackBox.Method() );

是否添加或不添加?!

答案 4 :(得分:0)

我很确定Java 不会让你这样做。 void关键字表示方法不返回任何内容。它与null不同,也不是与空列表相同,也不能用它来表示“什么都不做”,这就是你在这里的意思。

答案 5 :(得分:0)

void与NULL不一样,

List<string> myList = new List<string>();
bool istrue = false;
myList.Add(istrue ? "something" : null);

答案 6 :(得分:0)

你可以

List<string> myList = new List<string>();
myList.Add(false ? "true" : "false");

将“false”添加到列表中。

我猜你上面的代码在将void添加为字符串时遇到了问题。

尝试

myList.Add(istrue ? "something" : string.empty);

修改 如果您只想在某些事情发生时添加,那么只需执行

if(isTrue)
   myList.Add("something");

答案 7 :(得分:0)

据我了解,您尝试有条件地添加元素作为对象初始值设定项的一部分,而不是在后续的Adds中添加零碎的元素。我在同一条船上。

这是谷歌的最高结果,所以后人......

只要条件对集合中的每个元素都相同:

import static javax.swing.JOptionPane.showMessageDialog;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class XFrame extends JFrame implements ActionListener {
    JButton b = new JButton("Click me");

    ActionListener otherActionListener = new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            showMessageDialog(XFrame.this, "The other action says: 'Hi'");
        }
    };

    public XFrame() {
        getContentPane().add(b);

        b.addActionListener(this);

        b.addActionListener(otherActionListener);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
       showMessageDialog(this, "XFrame says: 'hello'");
    }

    public static void main(String[] args) {
        XFrame frame = new XFrame();
        frame.setSize(100,60);
        frame.setVisible(true);
    }
}

答案 8 :(得分:0)

您可以创建扩展方法:

<!-- jQuery -->
<script>
$(document).ready(function() {
    // Confirm user deletion
    $(".link-delete-user").click(function() {
        event.preventDefault();
        var db = $(this).attr('data-id');
        $("#delete-user-id").val(db);
        $("#delete-user-forename").text($(this).attr('data-forename'));
        $("#delete-user-name").text($(this).attr('data-name'));
        $("#modal-delete-user").modal("show");
  });
    // Delete user
    $("#form-delete-user").on('submit', function() {
        event.preventDefault();
        $.ajax({
            url: "crud-delete.php",
            type: "POST",
            data: $('#form-delete-user').serialize(),
            success: function(resp) {
                $('#form-delete-user')[0].reset();
                $('#modal-delete-user').modal('hide');
                $('#table-users').html(resp);
      }
    });
  });

});
</script>

您以这种方式使用它:

public static void Add<T>(this IList<T> source, T item, Func<bool> predicate)
{
    if (predicate())
    {
        source.Add(item);
    }
}