using System;
using System.Collections.Generic;
namespace JetBrains.ReSharper.Koans.Refactoring
{
// Convert Method to Indexer
//
// No shortcut. Invoke via Refactor This menu
// Ctrl+Shift+R
// Convert Indexer to Method(s)
//
// Converts an indexer property to a getter and/or setter method(s)
//
// No shortcut. Invoke via Refactor This menu
// Ctrl+Shift+R
public class ConvertMethodToIndexer
{
private readonly IDictionary lookup = new Dictionary();
// 1. Convert method to indexer
// Method must have single parameter
// Place text caret on method definition
// Invoke Convert Method To Indexer
// ReSharper suggests name
// Confirm to convert
private string GetValueByKey(string key)
{
return lookup.ContainsKey(key) ? lookup[key] : string.Empty;
}
// 2. Convert method to multi-dimensional indexer
// Method must have multiple parameters
// Place text caret on method definition
// Invoke Convert Method To Indexer
// ReSharper suggests name
// Confirm to convert
private string GetValueByKey(string key, string @default)
{
return lookup.ContainsKey(key) ? lookup[key] : @default;
}
public void OutputName()
{
Console.WriteLine(GetValueByKey("foo"));
Console.WriteLine(GetValueByKey("foo", "default value"));
}
}
public class ConvertIndexerToMethod
{
private readonly IDictionary lookup = new Dictionary();
// 3. Convert readonly indexer to method
// Place text caret on "this"
// Invoke Convert Indexer to Method(s)
// Create getter method
public string this[int index]
{
get { return lookup.ContainsKey(index.ToString()) ? lookup[index.ToString()] : string.Empty; }
}
// 3. Convert read/write indexer to method
// Place text caret on "this"
// Invoke Convert Indexer to Method(s)
// Create getter and setter method
public string this[string index]
{
get { return lookup.ContainsKey(index) ? lookup[index] : string.Empty; }
set { lookup[index] = value; }
}
}
}